如何在SAS的数据步骤中为一行添加多行

如何在SAS的数据步骤中为一行添加多行,sas,Sas,比如说,我有一张这样的桌子 # ID, X, Y 1, 0, 1 2, 1, 0 3, 1, 1 我的结果输出应该如下所示 # ID, X, Y, R 1, 0, 1, Y 2, 1, 0, X 3, 1, 1, X 3, 1, 1, Y 因此,您可以看到对于ID3,我们现在有两行而不是一行,因为X和Y都是一行,并且R列应该有一个值为1的所有列的条目 所以,我的问题是,如何使用SAS的数据步骤实现这种平坦化?注意,在我的例子中,X和Y都不能为零。其中至少有一个是1。使用输出语句作为IF-TH

比如说,我有一张这样的桌子

# ID, X, Y
1, 0, 1
2, 1, 0
3, 1, 1
我的结果输出应该如下所示

# ID, X, Y, R
1, 0, 1, Y
2, 1, 0, X
3, 1, 1, X
3, 1, 1, Y
因此,您可以看到对于ID3,我们现在有两行而不是一行,因为X和Y都是一行,并且R列应该有一个值为1的所有列的条目


所以,我的问题是,如何使用SAS的数据步骤实现这种平坦化?注意,在我的例子中,X和Y都不能为零。其中至少有一个是1。

使用
输出
语句作为
IF-THEN
do-block子句的一部分

  if x = 1 then do;
    r = 'x';
    output;
  end;
  if y = 1 then do;
    r = 'y';
    output;
  end;
如果有许多变量需要验证,请使用变量
ARRAY

  array myRvars x y z p q r s t u z1-z10;
  do index = 1 to dim(myRvars);
    if myRvars(index) = 1 then do;
      r = vname(myRvars(index));
      output;
    end;
  end;

你还想跟踪那些不会因为X和Y都为零而变平的ID吗?@Richard在我的例子中X和Y都不能为零。