1. 语法介绍
首先了解一下Set语句的语法:
SET <SAS-data-set(s) <(data-set-options(s) )> > <options>;
这里需要注意的就是data-set options是需要用括号括起来,而set语句的options直接跟在数据集名后面,用空格分开即可。常用的data-set options有keep=, drop=, rename=, where=, obs=等。这些option都是非常有用的,而且还会提高程序的运行效率。
SET语句常用的option有end=、nobs=、point=等,这些选项的使用会在后续的实际例子中进行介绍。SET语句可以使用一个数据集或者多个数据集,例如:
set a; set a b; set a1-a10; set a:;
2. END=与NOBS=的使用
END=variable创建一个标志变量,当前观测为数据集的最后一条观测时该变量被赋值1,其他时候都为0;NOBS=variable创建一个变量,其值为当前数据集的总观测数。下面是一个简单的统计程序:
- data null_;
- file print;
- set sashelp.class end=last nobs=tot;
- if age lt 15 then cnt1+1;
- else cnt2+1;
- if last then do;
- pct1=cnt1/tot;
- pct2=cnt2/tot;
- put "小于15岁的人数:" cnt1 ",占总人数的:" pct1 percent8.2;
- put "大于等于15岁的人数:" cnt2 ",占总人数的:" pct2 percent8.2;
- end;
- run;
复制代码
输出结果
[attach]6[/attach]
3.POINT=选项的使用
Point=variable指定一个变量,该变量的值决定了现在要读入第几条观测,下面是一个例子程序:
有一数据test,其形式如下:(该数据的生成程序见最后附录)
[attach]7[/attach]
该数据有18条观测,从1到18,每一个数字都对应了一个flag。变量i对应数据sashelp.class中的变量age,现在要做的工作就是通过变量age匹配flag的值。当然这个工作可以用PROC SQL轻松实现,也可以用merge语句实现,但现在要用SET语句加POINT=选项来实现,程序如下:
- data work.test2;
- set sashelp.class;
- temp=age;
- set work.test point=temp;
- run;
复制代码