SAS:来自数据集的最高变量的输出

时间:2017-05-04 14:35:56

标签: variables sas max

我想从现有的最高n变量中分配一个新变量。 因此,如果我们有一个列数越来越多的表 -

data have;
input uid $ var1 $ var2 $ var3 $;
datalines;                      
1111    1   0   1
2222    1   0   0
3333    0   0   0
4444    1   1   1
5555    0   0   0
6666    1   1   1
;

我想将变量var3作为final_code派生。

data want;
set have;
final_code = max(of var1-var3);
run;

以上在这里没有意义,因为我只想保留var3列。同样,如果有var4,我希望只有var4。

有人想帮助我吗?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您不希望{em>值的max,而是最高编号变量的值。

有很多方法可以做到这一点,哪种方式取决于变量的命名方式。这是最容易的,如果它们实际上就像你说的那样命名。

data want;
  set have;
  array var[*] var:;
  final_code = var[dim(var)];
run;

这里我们从var:创建一个数组,然后使用dim选择数组中的最后一个元素(比如说数组的大小)。

答案 1 :(得分:0)

我认为这就是你要找的:

%let n=3
data want;
set have;
var&n = max(of var1-var&n);
drop var1-var%eval(&n-1);
run;

宏变量&n保存n的值。这在代码的编译阶段充当替代。

DROP语句告诉数据步骤删除这些变量。

%eval()宏函数对宏值执行整数数学运算。所以我们通过N-1降低1。