在實際工作中經常碰到多個表之間的查詢,通過某個或某幾個索引欄位實現跨庫查詢,信息合併。下面的內容可能說法不夠專業,比較業餘,分享一段小程序。
目的:根據ICD-10(疾病編碼)將數據集每個觀測對象分不同的類,如腦卒中會有出血性、缺血性和其他三大類,按照CN-DRGs內科DRGs組為兩類,分別為顱內出血性和腦缺血性,出血性和缺血性疾病編碼放在不同的數據集中,編碼有不同的變量名稱,根據這兩部分的編碼分別給每個觀測對象打上類別標記。
國際疾病分類(International Classification of Diseases ,ICD),是WHO制定的國際統一的疾病分類方法,它根據疾病的病因、病理、臨床表現和解剖位置等特性,將疾病分門別類,使其成為一個有序的組合,並用編碼的方法來表示的系統。全世界通用的是第10次修訂本《疾病和有關健康問題的國際統計分類》,仍保留了ICD的簡稱,並被統稱為ICD-10。
總之,問題都很簡單,就是人群分類。
不管選擇什麼思路,理清邏輯很重要。
例子選用思路2的方法
/*編碼1數據集*/
data condition1;
input x1 $3.;
cards;
001
002
003
;
run;
/*編碼2數據集*/
data condition2;
input x2 $3.;
cards;
005
006
008
;
run;
/*待分類數據集*/
data test;
input ID $3.;
cards;
001
002
003
005
006
007
008
;
run;
/*分類標記*/
proc sql noprint;
create table all as
select * , "condition1" as data_set_s from test
where ID in (select x1 from condition1)
union
select * , "condition2" as data_set_s from test
where ID in (select x2 from condition2)
union
select * , "other" as data_set_s from test
where ID not in
(select x1 as x from condition1
union
select x2 as x from condition2); /*統一變量名稱*/
quit;
上述例子中test數據的ID需要在兩個數據集的兩個變量值裡查詢,子查詢不能在多列裡查詢,因此需要將X1和X2兩個變量值放在一列中,即統一變量名稱,再union一下。
思路1的例子,合併步沒加上:
上述兩種思路比較,一步到位是很簡單的。