Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS:使用多行患者数据统计特定类型疾病的数量_Sas_Frequency_Medical - Fatal编程技术网

SAS:使用多行患者数据统计特定类型疾病的数量

SAS:使用多行患者数据统计特定类型疾病的数量,sas,frequency,medical,Sas,Frequency,Medical,我有数百万患者的大型数据集,包括诊断、时间戳、patientID和人口统计信息 我们发现,一种特殊类型的疾病经常与一种常见疾病并存 我想数一数每位患者患有的这类疾病的数量,然后创建一个直方图,显示有多少人患有1、2、3、4等其他疾病 这是数据的格式 PatientID Diagnosis Date Gender Age 1 282.1 1/2/10 F 25 1 282.1 1/2/10 F

我有数百万患者的大型数据集,包括诊断、时间戳、patientID和人口统计信息

我们发现,一种特殊类型的疾病经常与一种常见疾病并存

我想数一数每位患者患有的这类疾病的数量,然后创建一个直方图,显示有多少人患有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循环,但我不确定从何处开始,因为数据集中存在重复项,就像patient 1一样,282.1列出了两次。我不知道该怎么解释。有什么想法吗

要统计的目标诊断数为282.1232.1250.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;
这就是输出表的外观。为什么这个病人会出现这么多次

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看到它们的不同时间,并将结果保存到新表中。

我认为您可以通过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看到它们的不同时间,并将结果保存到新表中。

如果您包含的变量既不是分组变量也不是汇总统计信息,SAS将很高兴地将汇总统计信息与所有源记录重新合并。这就是为什么您会得到多个记录。如果数据集覆盖多年,则年龄通常会有所不同。如果你的数据杂乱无章,性别也会有所不同。因此,为了快速分析,您可以尝试这样的方法

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
;

如果您包含的变量既不是分组变量,也不是摘要统计信息,那么SAS将很高兴地将摘要统计信息与所有源记录重新合并。这就是为什么您会得到多个记录。如果数据集覆盖多年,则年龄通常会有所不同。如果你的数据杂乱无章,性别也会有所不同。因此,为了快速分析,您可以尝试这样的方法

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
;


发布您尝试过的内容。您的下一个问题是哪些疾病和群体是什么,因此请确保您的方法现在考虑到了这一点。@Reeza我已更新帖子,以显示我尝试过的内容和结果。您包含的变量年龄和性别既不是群体变量,也不是聚合统计数据。将他们添加到组中,或者从所选变量列表中删除他们。张贴您尝试过的内容。您的下一个问题是哪些疾病和组是什么,因此请确保您的方法现在考虑到了这一点。@Reeza我已更新帖子,以显示我尝试过的内容和结果。您包括了年龄和性别这两个变量既不是组变量,也不是聚合统计。将它们添加到组中或从所选变量列表中删除。非常感谢您的建议!我试过了,把它放在输出中给我多行相同的patientID。我已经更新了上面的帖子。有什么想法吗?@Kevin,如果你按图所示编码,上面的解决方案就可以了。如果在代码中使用年龄/性别,则不会。请注意,你的问题中没有一个关于年龄/性别的词,因此根据你的提问,这个答案是正确的。这就是为什么展示你在做什么很重要的原因。根据你最新的问题,Tom所做的将会起作用。另一个选项是对显示的内容进行编码,并在单独的连接中添加年龄和性别信息。非常感谢您的建议!我试过了,把它放在输出中给我多行相同的patientID。我已经更新了上面的帖子。有什么想法吗?@Kevin,如果你按图所示编码,上面的解决方案就可以了。如果在代码中使用年龄/性别,则不会。请注意,你的问题中没有一个关于年龄/性别的词,因此根据你的提问,这个答案是正确的。这就是为什么展示你在做什么很重要的原因。根据你最新的问题,Tom所做的将会起作用。另一个选项是对显示的内容进行编码,并在单独的连接中添加年龄和性别信息。非常感谢!我将如何显示哪些人有我们正在寻找的0个诊断?您需要改变方法,因为您不能使用WHERE来消除观察结果。而是使用CASE语句将其移动到COUNT函数中。countdistinct case当在282.1232.1中进行诊断时,则诊断描述结束您将在将诊断代码存储在数字变量中时遇到问题。ICD10代码都以字母开头,ICD9中也有以字母开头的V和E代码。我完全同意将诊断代码存储为数字变量
可悲的。我没有在示例数据片段中包含ICD10代码,但它们确实存在。您建议的替代方案是什么?它实际上并不影响此查询的逻辑,而是将代码存储为字符串。因此,您对特定值的查询需要使用字符串文字而不是数字文字。非常感谢!我将如何显示哪些人有我们正在寻找的0个诊断?您需要改变方法,因为您不能使用WHERE来消除观察结果。而是使用CASE语句将其移动到COUNT函数中。countdistinct case当在282.1232.1中进行诊断时,则诊断描述结束您将在将诊断代码存储在数字变量中时遇到问题。ICD10代码都以字母开头,ICD9中也有以字母开头的V和E代码。我完全同意将诊断代码存储为数字变量。我没有在示例数据片段中包含ICD10代码,但它们确实存在。您建议的替代方案是什么?它实际上并不影响此查询的逻辑,而是将代码存储为字符串。因此,对特定值的查询需要使用字符串文本而不是数字文本。