2015-02-10 62 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