我想从现有的最高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。
有人想帮助我吗?
答案 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。