在SAS中的组内子集数据

时间:2017-09-14 18:32:10

标签: sas subset

我是新的SAS用户,在创建我想要的数据子集时遇到了一些困难。 我有调查数据,提示患者多次完成调查。如果他们完成调查,他们将不会再获得30天的提示。如果他们拒绝或什么也不做,他们会再次得到提示(可以在30天内)。

这是我的数据表:

Data Have;
Input RowId $ PatientId $ Action $ Date;
Datalines;
1 101 Prompted 201603
2 101 Prompted 201605
3 101   Yes 201605
4 102   Prompted 201606
5 103 Prompted 201612
6 103   No  201612
7 104 Prompted 201603 
8 104 Yes 201603 
9 105   Prompted 201608
10 105 Yes 201608
11 105 Prompted 201702
12 105 No 201702
13 106 Prompted 201703
14 106 Yes 201703
15 106 Prompted 201706
16 106 Yes 201706
run;    

我想创建两个数据子集 1)受访者 - 当有多个提示时,我想保留一个完成的调查 - 如果随着时间的推移有多个调查,我想保留最早的调查

2)非受访者 - 被提示但没有做任何事情的患者被视为非受访者

我想生成这两个子集:

受访者:

 Data Yes;
    Input RowId $ PatientId $ Action $ Date;
    Datalines;
    3 101   Yes 201605
    8 104 Yes 201603 
    10 105 Yes 201608
    14 106 Yes 201703
    run;

非受访者:

Data No;
Input RowId $ PatientId $ Action $ Date;
Datalines;
4 102   Prompted 201606
6 103   No  201612
run;

我理解数据并不是非常直观,我已尽力在此解释。任何帮助是极大的赞赏!

1 个答案:

答案 0 :(得分:1)

一起使用几种技术,我们可以非常简单地得到结果:

找到“是”患者,只保留第一个

data yes;
  set have(where=(action="Yes"));
  by patientId;
  if first.patientId;
run;

使用 last.

找到“否”/“不答复”患者
data no;
  merge have(in = H)
         yes(in = Y);
  by patientId;
  if H and not Y and last.patientId;
run;

结果

dfGroupby.agg