SAS:计算多行患者数据的特定类型疾病的数量
SAS: Count number of a particular type of disease with patient data on multiple lines
我有数百万患者就诊的大型数据集,其中包括诊断、时间戳、患者 ID 和人口统计信息。
我们发现特定类型的疾病经常与常见病症并存。
我想统计每位患者患有此类疾病的数量,然后创建一个直方图显示有多少人患有 1、2、3、4 等其他疾病。
这是数据的格式。
PatientID Diagnosis Date Gender Age
1 282.1 1/2/10 F 25
1 282.1 1/2/10 F 87
1 232.1 1/2/10 F 87
1 250.02 1/2/10 F 41
1 125.1 1/2/10 F 46
1 90.1 1/2/10 F 58
2 140 12/15/13 M 57
2 282.1 12/15/13 M 41
2 232.1 12/15/13 M 66
3 601.1 11/19/13 F 58
3 231.1 11/19/13 F 76
3 123.1 11/19/13 F 29
4 601.1 12/30/14 F 81
4 130.1 12/30/14 F 86
5 230.1 1/22/14 M 60
5 282.1 1/22/14 M 46
5 250.02 1/22/14 M 53
一般来说,我在考虑一个 DO 循环,但我不确定从哪里开始,因为数据集中有重复项,例如患者 1(282.1 列出了两次)。我不确定如何解释这一点。有什么想法吗?
要计数的目标诊断为 282.1、232.1、250.02。在此示例中,患者 1 的计数为 3,患者 2 的计数为 2,依此类推。
编辑:
这是我用过的,但输出在输出的多行中显示了每个 PatientID。
PROC SQL;
create table want as
select age, gender, patientID,
count(distinct diagnosis_description) as count
from dz_prev
where diagnosis in (282.1, 232.1)
group by patientID;
quit;
这就是输出 table 的样子。为什么这个 patientID 出现这么多次?
Obs AGE GENDER PATIENTID count
1 55 Male 107828695 1
2 54 Male 107828695 1
3 54 Male 107828695 1
4 54 Male 107828695 1
5 54 Male 107828695 1
我想你可以通过 SQL 声明得到你想要的东西
PROC SQL NOPRINT;
create table want as
select PatientID,
count(distinct Diagnosis) as count
from have
where Diagnosis in (282.1, 232.1, 250.02)
group by PatientID;
quit;
这将仅筛选出您感兴趣的诊断,按 PatientID 计算它们出现的不同次数,并将结果保存到新的 table。
如果您包含的变量既不是分组变量也不是汇总统计数据,那么 SAS 会很乐意将您的汇总统计数据重新合并回所有源记录。这就是您获得多条记录的原因。如果您的数据集涵盖多年,AGE 通常会有所不同。如果您的数据杂乱无章,GENDER 也会有所不同。因此,为了快速分析,您可以尝试这样的操作。
create table want as
select patientID
, min(age) as age_at_onset
, min(gender) as gender
, count(distinct diagnosis_description) as count
from dz_prev
where diagnosis in (282.1, 232.1)
group by patientID
;
我有数百万患者就诊的大型数据集,其中包括诊断、时间戳、患者 ID 和人口统计信息。
我们发现特定类型的疾病经常与常见病症并存。
我想统计每位患者患有此类疾病的数量,然后创建一个直方图显示有多少人患有 1、2、3、4 等其他疾病。
这是数据的格式。
PatientID Diagnosis Date Gender Age
1 282.1 1/2/10 F 25
1 282.1 1/2/10 F 87
1 232.1 1/2/10 F 87
1 250.02 1/2/10 F 41
1 125.1 1/2/10 F 46
1 90.1 1/2/10 F 58
2 140 12/15/13 M 57
2 282.1 12/15/13 M 41
2 232.1 12/15/13 M 66
3 601.1 11/19/13 F 58
3 231.1 11/19/13 F 76
3 123.1 11/19/13 F 29
4 601.1 12/30/14 F 81
4 130.1 12/30/14 F 86
5 230.1 1/22/14 M 60
5 282.1 1/22/14 M 46
5 250.02 1/22/14 M 53
一般来说,我在考虑一个 DO 循环,但我不确定从哪里开始,因为数据集中有重复项,例如患者 1(282.1 列出了两次)。我不确定如何解释这一点。有什么想法吗?
要计数的目标诊断为 282.1、232.1、250.02。在此示例中,患者 1 的计数为 3,患者 2 的计数为 2,依此类推。
编辑: 这是我用过的,但输出在输出的多行中显示了每个 PatientID。
PROC SQL;
create table want as
select age, gender, patientID,
count(distinct diagnosis_description) as count
from dz_prev
where diagnosis in (282.1, 232.1)
group by patientID;
quit;
这就是输出 table 的样子。为什么这个 patientID 出现这么多次?
Obs AGE GENDER PATIENTID count
1 55 Male 107828695 1
2 54 Male 107828695 1
3 54 Male 107828695 1
4 54 Male 107828695 1
5 54 Male 107828695 1
我想你可以通过 SQL 声明得到你想要的东西
PROC SQL NOPRINT;
create table want as
select PatientID,
count(distinct Diagnosis) as count
from have
where Diagnosis in (282.1, 232.1, 250.02)
group by PatientID;
quit;
这将仅筛选出您感兴趣的诊断,按 PatientID 计算它们出现的不同次数,并将结果保存到新的 table。
如果您包含的变量既不是分组变量也不是汇总统计数据,那么 SAS 会很乐意将您的汇总统计数据重新合并回所有源记录。这就是您获得多条记录的原因。如果您的数据集涵盖多年,AGE 通常会有所不同。如果您的数据杂乱无章,GENDER 也会有所不同。因此,为了快速分析,您可以尝试这样的操作。
create table want as
select patientID
, min(age) as age_at_onset
, min(gender) as gender
, count(distinct diagnosis_description) as count
from dz_prev
where diagnosis in (282.1, 232.1)
group by patientID
;