我有一个诊断代码的数据集,每个观察有多个诊断代码,最多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