2015-02-10 55 views
1

我有一个病人信息数据集,我想要统计有多少患者(观察)具有给定的诊断代码。在diag1,diag2 ... diag9中,我有9个可能的变量。代码是V271。我无法弄清楚如何用“WHERE”子句或proc freq来做到这一点。跨多个变量的值的频率?

任何帮助将不胜感激!

+0

以下方法的注意事项是,如果一个人可以有多个诊断代码,这些诊断代码相当于通过多个代码找到的一个条件。这更像是一个诊断编码/实践问题,但我看到它发生了。 – Reeza 2015-02-10 20:57:13

回答

2

您的基本策略是创建一个不是患者等级的数据集,但是一个观察值是一个患者诊断代码(因此每个患者最多有9个观察值)。例如:

data want; 
    set have; 
    array diag[9]; 
    do _i = 1 to dim(diag); 
    if not missing(diag[_i]) then do; 
     diagnosis_Code = diag[_i]; 
     output; 
    end; 
    end; 
    keep diagnosis_code patient_id [other variables you might want]; 
run; 

然后,您可以在生成的数据集上运行proc freq。您还可以将标准从不丢失改为if diag[_i] = 'V271' then do;,以便仅获取数据中的V271。

+0

昏暗(diag)部分是什么?我可以复制/粘贴吗? – lrk889 2015-02-10 19:36:50

+0

这部分决定了数组的维数(如果你改变了它,最好不要硬核)。 – Joe 2015-02-10 19:44:09

+0

关于Joe的最后一部分关于如果diag [_i}的评论,您可以使用WhichC函数而不是do循环。 – Reeza 2015-02-10 20:01:46

1

重塑可以匹配Joe方法的数据的另一种方法是使用proc transpose

proc transpose data=have out=want(keep=patient_id col1 
            rename=(col1=diag) 
            where=(diag is not missing)); 
    by patient_id; 
    var diag1-diag9; 
run; 
+0

你当然可以在'out'语句中使用'where'数据集选项更接近我。 – Joe 2015-02-10 22:17:51

+0

好点。做了一个编辑。 – DWal 2015-02-10 22:44:50