_n_:首先是观测序号这个自动变量,每次你set <table> 到一个数据集中的时候,SAS默认是逐行导入的,每行导入的时候都会赋值到_n_这个变量里面;使用方法和point相似,可以具体比较一下,当然_n_使用的时候只能用if语句而不能用where语句;
eg.
data a;
set b;
if _n_=3;/*导入第3行*/
where _n=3_; /*会报错*/
point的作用也是导入固定的行数,但是我们使用point的时候必须要和stop语句一起使用;
eg.
data a;
do i=1 to (b的行数) by 2;
set b point=i;
end;
stop;
run; /*这样就可以导入b的奇数行到a中*/
_num_ _char_:这两个变量时默认的所有数值变量和所有字符变量;
平时使用的不太多,但是在iml的矩阵模块里面这两个变量就很重要了;
proc iml;
use a; /*a为一个数据集*/
read all var _num_ into aa;/*把所有的数字型数据导入到aa矩阵中*/
read all var _char_ into aa;/*把所有的字符型数据导入到aa矩阵中*/
还有比较多的是set过程中产生的自动变量,运用它们会使导入数据变得更加简单快捷
1、
end=<variable> 赋值到一个变量(自己设定) 当导入到最后一行的时候,这个变量的值就为0;
在金融计算中,我们很多时候都只是需要一个变量的总和,再来计算多个总和的比例;
eg.
data a;
set b end=a; /*b中有 b1 b2 两个变量,我们只想计算b1总值 和b2总值的比例*/
sumb_1+b1;
sumb_2+b2;
if a=1;
run;
/*a这个数据集中就只有b1和b2的总值了*/
2、last.variable 和first.variable;
同样是在金融计算中,我们有可能有时候只想知道某个数据一年中的最后一个值,比如计算年收益率,那么我们只需要得到每年的最后一个收盘价再进行比较就可以了;
proc sort data a;
by year;/*year=yearpart(date),可以把年这个变量从时间变量中提取出来*/
data a;
set a;
by year;
if last.year;/*那么就可以得到每年的最后一个值*/
需要注意的是last.variable 一定要和by variable一起使用,因为它是按照by分组后产生的最后一个;
/*自己随手整理的一小部分,但是在处理实际问题的时候实用性还是很大的*/