If statement 将数据放入字符变量sas

If statement 将数据放入字符变量sas,if-statement,sas,character,var,assign,If Statement,Sas,Character,Var,Assign,我面临的问题是,我想把数据放入一个字符变量中。 所以我有一个长的转换数据集,其中我有三个变量:日期,我在手之前转换var有我以前变量的三个不同输出,col1包括我以前变量的值。 现在我想创建一个forth变量,它有三个不同的输出。我的问题是我可以用我的代码创建变量,它总是创建缺少的值 data pair2; set data1; if var="BNNESR" or var="BNNESR_r" or var="BNNESR_t" then output; length all $ 20; a

我面临的问题是,我想把数据放入一个字符变量中。 所以我有一个长的转换数据集,其中我有三个变量:日期,我在手之前转换var有我以前变量的三个不同输出,col1包括我以前变量的值。 现在我想创建一个forth变量,它有三个不同的输出。我的问题是我可以用我的代码创建变量,它总是创建缺少的值

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变量将其转换回来。我知道我可以在转换之前重命名旧的变量,然后保留它们。
但是完整的计算将继续进行,并且实际上将变成一个宏,如果这样做就不那么容易了。

您的程序将只对输入数据进行子集,并添加一个新的空变量,因为您在将任何值赋给新变量之前正在写入数据

使用子集IF或WHERE语句,而不是使用显式输出语句。一旦数据步骤具有显式输出语句,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语句中的列表与recode步骤中的值相匹配,那么您是否只想使用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;

为什么在将记录写入输出数据集后要更改某些变量的值?这是因为marco,我稍后会将其打开,因为我总共使用了20次BNNESR、BNNESR_t和BNNESR_r以及其他名称。在我再次将其转换回来后,我将使用rdev pdev和触发器进行计算。我试着用宏变量来计算它总是有一个错误,所以我决定找到一种方法来避免总是有一个宏变量。总的来说,我的代码看起来是这样的:宏只是生成代码。所以,让它生成有效的代码。您可能可以使用一种格式将VAR重新编码到所有代码中。或者使用SELECT语句块而不是IF/THEN/ELSE IF/