数据如下:
ID----X1----X2----X3----Z1----Z2----Z3
对于每个ID,请考虑两组变量{X1, X2, X3}
和{Z1, Z2, Z3}
:
考虑一个假设数据:
data temp;
input ID x1 x2 x3 z1 z2 z3;
datalines;
1001 11 12 13 . 12 11
1002 21 22 23 24 25 26
1003 31 32 33 31 32 .
1004 41 42 43 41 44 45
;
run;
我希望它是:
1001 11 12 . . 12 11
1002 . . . . . .
1003 31 32 . 31 32 .
1004 41 . . 41 . .
答案 0 :(得分:3)
如果我理解正确,您需要单独处理每个数组。首先,您将X
值设置为Z
以外的Z
,然后返回并在X
中设置不在data want;
set temp;
array Xarr{*} x:;
array Zarr{*} z:;
do _i_=1 to dim(Xarr);
if not (Xarr(_i_) in Zarr)
then Xarr(_i_) = .;
end;
do _i_=1 to dim(Zarr);
if not (Zarr(_i_) in Xarr)
then Zarr(_i_) = .;
end;
drop _i_;
run;
中的值。试试这个:
{{1}}
答案 1 :(得分:1)
现在不在sas旁边,但这应该与你追求的大致相同:
data test;
set temp;
array arrx{*} x:;
array arrz{*} z:;
arriter = max(dim(arrx), dim(arrz));
do _i = 1 to arriter;
if arrx{_i} ne arrz{_i} then do;
arrx{_i} = .;
arrz{_i} = .;
end;
end;
run;
我不确定在x中有多于z的元素或反之亦然的情况下你想做什么,所以这段代码会保持原样。