SAS中组内的子集数据

SAS中组内的子集数据,sas,subset,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 10

我是一个新的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;
非受访者:

 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;

我知道数据不是很直观,我已经尽力在这里解释了。非常感谢您的帮助

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

找到“是”的患者,只保留第一个实例 使用have、yes和
last查找“否”/“无反应”患者。
结果

请添加您尝试过的代码,并描述为什么它不起作用(它做错了什么)。谢谢@Dominic!你的解决方案达到了我想要的,而且非常简单!