我有一個診斷代碼的數據集,每個觀察有多個診斷代碼,最多95個(變量dx1-dx95),一些dx代碼是數字但有些是e代碼(它們在數字之前有一個E,然後它們變成字符變量)。我需要編寫能夠查看所有95個dx代碼變量的代碼,並在每次有e代碼時生成新的變量ecode1-ecode#(但是在那個觀察中有很多ecode)。例如,一個觀察可能有dx1 = 999 dx2 = E100 dx3 = 878,dx4 = E202,我需要做出新的變量ecode1 = E100 ecode2 = 202。我昨天寫的代碼讓我接近了,但是我寫的代碼使上面的例子ecode2 = E100 ecode4 = E202。 ecode變量#結束與dx#相同,而不是從1開始計數。SAS使用數組搜索變量,然後填充新變量
下面是昨天我寫的:
**//array to pull out ecodes from dx1-dx95//**;
data ecodes;
set injurycodes;
*array to create new ecode variables;
array ecode{95}$ ecode1-ecode95;
*array to pull out ecodes;
array dxcode{95} dx1-dx95;
do i=1 to 95;
if 'E0000' le dxcode{i} le 'E9999' then ecode{i}=dxcode{i};
end;
drop i;
run;
我知道現在的問題是ECODE {I} = {dxcode I}片。這是拉出Ecodes,但它們不與ecode1,ecode2等開始
更新代碼:
data ecodes;
set injurycodes;
array ecode{95}$ ecode1-ecode95;
array dxcode{95} dx1-dx95;
j=0;
DO i=1 TO 95;
IF SUBSTR(CATT(dxcode{i}),1,1)="E" THEN DO;
ecode{j}=dxcode{i};
j=j+1;
END;
END;
run;
現在我得到「無效的第二個參數的功能SUBSTR」
DX代碼幾乎總是作爲字符存儲,爲什麼你想要數字的代碼? – Reeza