在SAS中:如何按组合并行中的非零值

时间:2019-01-09 00:27:59

标签: sas

我有一个数据集,其中包含变量ObservationNumberMeasurementNumberSubjectID和许多虚拟变量。

我想通过SubjectID GroupNumber将所有非零值合并为一行。

拥有:

ObsNum    MeasurementNum    SubjectID    Dummy0    Dummy1  ...    Dummy999         
----------------------------------------------------...---------------   
01                1          1          0          1            ...    0
02                2          1          0          1            ...    0
03                3          1          0          1            ...    0
04                4          1          0          0            ...    0
05                5          1          -          -            ...    -
06                6          1          0          0            ...    0
07                1          2          1          0            ...    0
08                2          2          0          0            ...    0  
09                3          2          0          1            ...    0
10                4          2          1          0            ...    0
11                4          2          0          1            ...    0 
12                5          2          0          0            ...    1  
13                6          2          0          0            ...    0  
14                6          2          0          0            ...    1  
15                6          2          0          0            ...    0  
16                6          2          0          0            ...    0  
17                6          2          0          1            ...    0  
18                6          2          0          0            ...    0  
19                6          2          0          0            ...    0  
20                6          2          0          0            ...    0  
21                6          2          1          0            ...    0   
22                1          3          1          0            ...    0
23                2          3          0          1            ...    0
24                3          3          0          0            ...    1
25                4          3          -          -            ...    -
26                5          3          0          0            ...    0
27                6          3          0          0            ...    0  
28                1          4          -          -            ...    -
29                2          4          0          0            ...    0
30                3          4          0          1            ...    0
31                4          4          1          0            ...    0
32                4          4          0          1            ...    0
33                4          4          0          0            ...    1   
34                5          4          0          0            ...    1
35                6          4          0          1            ...    0
36                6          4          0          0            ...    1 

想要:

   MeasurementNum    SubjectID    Dummy0    Dummy1  ...    Dummy999         
----------------------------------------------------...---------------   
                1          1          0          1            ...    0
                2          1          0          1            ...    0
                3          1          0          1            ...    0
                4          1          0          0            ...    0
                5          1          -          -            ...    -
                6          1          0          0            ...    0
                1          2          1          0            ...    0
                2          2          0          0            ...    0  
                3          2          0          1            ...    0
                4          2          1          1            ...    0
                5          2          0          0            ...    1  
                6          2          1          1            ...    1  
                1          3          1          0            ...    0
                2          3          0          1            ...    0
                3          3          0          0            ...    1
                4          3          -          -            ...    -
                5          3          0          0            ...    0
                6          3          0          0            ...    0  
                1          4          -          -            ...    -
                2          4          0          0            ...    0
                3          4          0          1            ...    0
                4          4          1          1            ...    1
                5          4          0          0            ...    1
                6          4          0          1            ...    1

每个SubjectID都有六个测量值,其中测量的一组伪变量没有结果0、1或丢失。如果出现缺失值,则相应观测值的所有伪变量都将丢失-并且在该“测量编号”的数据集中将仅出现一个观测值。

我尝试使用UPDATE语句,但是它似乎无法处理'0'和'-'。

是否存在一种直接方法来压缩由SubjectID分组的每个MeasurementNumber的数据集中的所有哑变量?

1 个答案:

答案 0 :(得分:0)

Proc MEANSBYOUTPUT语句一起使用。

data have;
  rownum = 0;
  do rowid = 1 to 1000;
    subjectid + 1;
    do measurenum = 1 to 6;
      do repeat = 1 to ceil(4 * ranuni(123));
        array flags flag1-flag999;
        do _n_ = 1 to dim(flags);
          flags(_n_) = ranuni(123) < 0.10;
          if subjectid < 7 and measurenum = subjectid then flags(_n_) = .;
        end;
        rownum + 1;
        output;
      end;
    end;
  end;
  keep rownum measurenum subjectid flag:;
run;

proc means noprint data=have;
  by subjectid measurenum;
  var flag:;
  output max=;
run;