【问题标题】:putting data into character variable sas将数据放入字符变量 sas
【发布时间】:2018-05-27 16:58:22
【问题描述】:

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

【问题讨论】:

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

标签: if-statement sas character var assign


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2016-08-29
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多