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
;