henryyhl 发表于 2013-4-15 21:03
有个问题请教一下:
rename在PDV中时怎么执行的呢?我仿照LZ写的一个put但是结果却是不懂。
程序:
您好,对于您的问题,我的理解是这样的:
RENAME语句中所设定的新的变量名字只会影响到输出数据集。
也就是说,SAS在将PDV中的记录输出到目标数据集的时候,才会执行rename的操作。
而PDV中所记录的还是变量原来的名字,我想正是因为这个原因,当我们需要对RENAME所指定的变量进行操作时,需要使用原变量名,而不能用新变量名。
这里使用RENAME语句应该相当于在DATA语句使用RENAME=数据集选项。
data one;
retain n_1 n_2 n_3 0;
put "before rename " _all_;
n_1=n_1+1;
n_2=n_2+2;
n_3=n_3+3;
rename n_1-n_3=n_3_1-n_3_3;
put "after rename " _all_;
RUN;
data one(rename=( n_1-n_3=n_3_1-n_3_3));
retain n_1 n_2 n_3 0;
put "before rename " _all_;
n_1=n_1+1;
n_2=n_2+2;
n_3=n_3+3;
put "after rename " _all_;
RUN;
而如果在SET语句指定的数据集中使用RENAME=数据集选项,SAS在PDV中记录的应该就是新的名字。
data two;
put "before set" _all_;
set one(rename=(n_3_1-n_3_3=new1-new3));
new1=new1+4;
put "after set" _all_;
put " ";
run;
PUT语句在log中输出的是PDV中变量的名字;相应的,DATA步中对变量进行操作时,也只能用PDV中所记录的变量名。