set SASHELP.workers(firstobs=10 obs=15)
if ELECTRIC>260
run
proc printrun
Obs DATEELECTRICMASONRY
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条记录。
解法2:
data tmp
set SASHELP.workers(firstobs=10 obs=15)
where ELECTRIC>260
run
proc printrun
Obs DATEELECTRICMASONRY
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的,对当前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个观测开始。
综上可知,该题中应使用if语句。
SAS的数据步和过程步以及书写规则每个SAS程序可以由许多步构成,
一些简单的程序,是由许多完成单个动作的“程序步”和一些设定环境的语句构成的。SAS只有两种程序步:
1. 数据步(Data Step):读入源数据文件和SAS数据集,修改、编辑、或创建SAS数据集或文本文件;
2.过程步烂液巧(Proc Step):面向SAS数据集,饥键完成某个特定的计算,分析,和呈现的功能。
每个程序都是由若干语句构成。每个语句是有一个关键词开始,并以分号结束。通常就用开始的关键词命名这个语句。
DATA语句与PROC语句分别标志着数据步和过程步的开始,RUN语句或另一个程序的开始标志着程序的结束。
SAS程序的书写规则:
SAS程序是由SAS语句构成的。每个语句由关键词开始,分号结束。在程序编写时,SAS语句的书写格式比较自由,即:
1.语句可在行的任一列开始和结束;
2.语句的词之间可以用一个或多个空格符或其它特殊字符隔开。
3.一埋帆个语句可以分写为多行(换行时,换行符相当于一个空格符)
4.多个语句也可以写在同一行。
1、首先,打开 *** 作页面州袭厅,导入要 *** 作的数据。
2、在数据集test中,含有学生姓名name,班级class,课程course和成绩score,现在来求出每个学生的总成绩分别是多少,代码如下。
3、如果想将结果保存到数据集里面去,则代码如下。
4、接下来来求出两个班的平均成绩分别是多少。
5、接下来来求出两个班的每一科的平均成绩分别是多少。
6、group by后面的变量禅芦就是需要进行分组的变量,可以根据自己的需要进行修改,分组册隐汇总排序就完成了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)