我面临的问题是我想将数据放入字符变量中。 所以我有一个很长的转置数据集,其中我有三个变量:日期(我手工转置)var(我以前的变量有三个不同的输出)和col1(包括我之前变量的值)。 现在我想创建一个第四个变量,它有三个不同的输出。我的问题是我可以使用我的代码创建变量put,它总是创建缺失值。
data pair2;
set data1;
if var="BNNESR" or var="BNNESR_r" or var="BNNESR_t" then output;
length all $ 20;
all=" ";
if var="BNNESR" then all="pdev";
if var="BNNESR_t" then all="trigger";
if var="BNNESR_r" then all="rdev";
drop var;
run;
之后我想用" all"变量。我知道我可以在转置它之前重命名旧变量,然后保留它们。 但是完整的计算将继续进行,实际上将变成一个宏,如果这样做就不那么容易了。
答案 0 :(得分:1)
您的程序将只对输入数据进行子集化并添加一个空的新变量,因为您在将任何值赋给新变量之前将数据写出来。
使用子集化IF(或WHERE)语句,而不是使用显式OUTPUT语句。一旦您的数据步骤具有显式OUTPUT语句,SAS就不再在数据步骤迭代结束时自动写入观察。
data pair2;
set data1;
if var="BNNESR" or var="BNNESR_r" or var="BNNESR_t" ;
length all $20;
if var="BNNESR" then all="pdev";
else if var="BNNESR_t" then all="trigger";
else if var="BNNESR_r" then all="rdev";
drop var;
run;
由于IF语句中的列表与重新编码步骤中的值匹配,那么您可能只想使用DELETE语句吗?
data pair2;
set data1;
length all $20;
if var="BNNESR" then all="pdev";
else if var="BNNESR_t" then all="trigger";
else if var="BNNESR_r" then all="rdev";
else delete;
drop var;
run;