如何对比两组变量(在SAS中)

时间:2013-06-28 07:21:45

标签: sas

数据如下:

ID----X1----X2----X3----Z1----Z2----Z3

对于每个ID,请考虑两组变量{X1, X2, X3}{Z1, Z2, Z3}

  • X和Z的数量可以相等或不相等。他们也可能缺少价值。
  • 每组中变量的值是唯一的。也就是说,对于每个ID,X1不等于X2不等于X3。这同样适用于Zs。
  • Xs和Zs的值可以相等,并且存在问题。如何创建保留Xs和Zs的相等值并排除不相等值的新数据。例如,如果X1等于任何Zs,那么X1将与Z保持在一起。

考虑一个假设数据:

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      .      .

2 个答案:

答案 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的元素或反之亦然的情况下你想做什么,所以这段代码会保持原样。