将数据放入字符变量sas

时间:2017-12-13 17:40:35

标签: if-statement sas character var assign

我面临的问题是我想将数据放入字符变量中。 所以我有一个很长的转置数据集,其中我有三个变量:日期(我手工转置)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"变量。我知道我可以在转置它之前重命名旧变量,然后保留它们。 但是完整的计算将继续进行,实际上将变成一个宏,如果这样做就不那么容易了。

1 个答案:

答案 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;