sasifor语句


SAS分支条件语句的语法格式哪种是正确的

有了控制结构就可以控制程序执行的流程。如果没有复选控制流语句,程序便从左至右,自上向下地逐句执行这些语句。有些简单的程序可以只用单项流程来编写,有些流程可以依靠运算符的优先级来控制,但任何编程语言的功能和用途都是通过结构和循环改变语句顺序的能力而得到。

Visual Basic过程能够测试条件式,然后根据测试结果执行不同的操作。Visual Basic支持的判定结构有If…Then、If…Then…Else和Select Case。

可以用If…Then结构有条件地执行一个或几个语句。单行语法和多行语法都可以使用:

If 条件 Then 语句

If 条件 Then

语句

End If

条件通常是比较式,但它可以是任何计算数值的表达式。Visual Basic把这个值解释为True或False。一个为零的数值为False,而任何非零的数值都被看做True。如果条件为True,则Visual Basic执行关键字Then后面的所有语句。

If…Then的单行格式不用End If语句。如果条件为True时要执行几行代码,则必须使用多行块If…Then…End If语法。

希望我能帮助你解疑释惑。

if 语句or问题

or是“或”的意思,如果逻辑表达式中全是“或”的关系,如:比1000大或比100大或比10大,按照逻辑运算法则和编译原理,只要满足一个条件,就没必要再看后面的条件了。

用and 还是用 or,取决于你的逻辑意图:

如果是要么有学生证,要么不足12岁,要么身高小于1.4米,只要满足任何一条,坐火车可以半票,那么就得都用or,如果你有学生证,满足了第一条,后两条就可以不看。同样,不满足第一条,但满足第二条,第三条则可以不看。

如果你的意图是,这三条,有任何一条不满足都不行,那就得用and

比如你要找工作,你得本科,你得有学位,你得男性,你得健康,你得专业对口,你得两年经验,有任何一条不满足都不行,这就得用and

or和and也可以进行混合逻辑运算,可以弄得无限复杂,不过就你这个运算,弄懂这些就够了。

这回明白了吗?

if和where在SAS中的区别

您好,是这样的:

将数据集*s第10到15条观测中满足条件”ELECTRIC>260″的观测提取出来,生成新的数据集tmp。

方法一:

data tmp;

set *s(firstobs=10 obs=15);

if ELECTRIC>260;

run;

proc print;

run;

Obs DATE ELECTRIC MASONRY

1 OCT77 278.6 288.7

2 NOV77 276.2 286.2

3 DEC77 274.6 276.7

4 JAN78 262.1 234.3

可见结果输出4条记录;

方法二:

data tmp;

set *s(firstobs=10 obs=15);

where ELECTRIC>260;

run;

proc print;

run;

Obs DATE ELECTRIC MASONRY

1 MAY78 278.0 295.5

2 JUN78 289.5 308.3

3 JUL78 296.6 306.9

4 AUG78 305.1 315.3

5 SEP78 307.8 310.6

6 OCT78 308.2 316.3

可见结果输出6条记录。

问题是上述两种方法为什么输出结果不一样?请注意if语句和where语句的区别:

区别:

1. if语句是面向PDV(logical program data vector)的,对当前PDV中的数据进行判断,满足条件时将其写入到外部数据集;where语句也是面向PDV的,它使用于从外部数据源读数据到PDV之前进行判断,当满足条件时才被写入到PDV。显然一个在写入PDV之前,一个在写入PDV之后,两者是有差异的。

2. 当没有数据集选项firstobs=10 obs=15时,if语句和where语句用法结果相同,但有这两个选项时效果就不同了。有这两个选项,if语句是从原数据集(或数据源)的观测记录进行计算个数,即从原数据集的第10号观测开始读入到PDV中,然后再判断是否满足if条件,若满足则输出到外部数据集,直到原数据集的第15号观测结束。而where语句是在读入到PDV之前就进行判断的,所以这里的firstobs的意思是从使得满足where条件的第10个观测开始,而不是原数据集的第10个观测开始。

sas语句如何嵌入中文?很简单

010′,input语句中的输入格式就会有错误.正确的input语句:

input date mmddyy10. time $ open high low close volume amount;

format date mmddyy10.;

run;

另一处错误:set ifa(where=(date=’05/04/’));

在第一个数据步data *;中,定义的数据集名为*,在set语句中,缺省的引用数据集为*.而且语句date=’05/04/’非法,必须将日期转换成SAS的日期格式,即data=’04/MAY/’d;.

更正后的程序如下:

data *;

infile ‘C:Documents and SettingsCY桌面*’ dlm=’,’;

input date mmddyy10. time $ open high low close volume amount;

format date mmddyy10.;

run;

data *;

set *(where=(date=’04/MAY/’d));

run;

程序中可能存在中文输入法下的标点符号,如果不能运行,可以在这方面着手检查. 最后建议将第二个数据集命名为*,否则第二个数据步生成的数据集将覆盖原始数据集.