I need help with coding ICD9 codes. These codes have four or five digits. For example, it can be E810 or E8100. I want to filter the range of these codes which can be E8100 to E8139 or E810 to E813. By using following code , I am missing out on five digit records starting with E813, E819 , E825. I am also missing records with four digits such as E810, E812 ,E813 or 819. In short, I would like to filter observations starting with first four digits as well as range starting those digits. Could anyone help with this? Thank you
Data WW.WW2;
set WW.WW1;
If E_CODE_1 ='.........' Then ECODE_MECH ='........' ;
IF 'E810%'<= E_CODE_1 <='E813%' OR 'E815%'<= E_CODE_1<='E819%' OR 'E822%'<= E_CODE_1<='E825%' OR E_CODE_1 IN ('E9885','E9290')
THEN ECODE_MECH = '1';
IF 'E814%'<= E_CODE_1 <= 'E814%'
THEN ECODE_MECH= '2';
RUN;
There are no wildcard filters like you have with %. That can work in SQL and/or using a WHERE clause.
You can use =: to check if the strings are equivalent and that may be what you want but be careful and test it thoroughly.
The most efficient way I've found is to create a master list of the codes I do want - can usually filter from online lists and then use that directly with a PROC FORMAT to select the records of interest.
if E_CODE_1 =: 'E810' or E_CODE_1 =: 'E811' ... etc.
Or you could convert a portion to a numeric and use that for your conditions.
if substr(e_code_1, 1,1) = 'E' and 810 <= input(substr(e_code_1, 2, 3), 8.) <=813
Be very careful with text comparisons using Greater Than or Less Than operators. The algorithm is text so it goes:
0
1
10
11
12
13
...
2
20
21
...
20
@GARYV wrote:
I need help with coding ICD9 codes. These codes have four or five digits. For example, it can be E810 or E8100. I want to filter the range of these codes which can be E8100 to E8139 or E810 to E813. By using following code , I am missing out on five digit records starting with E813, E819 , E825. I am also missing records with four digits such as E810, E812 ,E813 or 819. In short, I would like to filter observations starting with first four digits as well as range starting those digits. Could anyone help with this? Thank you
Data WW.WW2; set WW.WW1; If E_CODE_1 ='.........' Then ECODE_MECH ='........' ; IF 'E810%'<= E_CODE_1 <='E813%' OR 'E815%'<= E_CODE_1<='E819%' OR 'E822%'<= E_CODE_1<='E825%' OR E_CODE_1 IN ('E9885','E9290') THEN ECODE_MECH = '1'; IF 'E814%'<= E_CODE_1 <= 'E814%' THEN ECODE_MECH= '2'; RUN;
There are no wildcard filters like you have with %. That can work in SQL and/or using a WHERE clause.
You can use =: to check if the strings are equivalent and that may be what you want but be careful and test it thoroughly.
The most efficient way I've found is to create a master list of the codes I do want - can usually filter from online lists and then use that directly with a PROC FORMAT to select the records of interest.
if E_CODE_1 =: 'E810' or E_CODE_1 =: 'E811' ... etc.
Or you could convert a portion to a numeric and use that for your conditions.
if substr(e_code_1, 1,1) = 'E' and 810 <= input(substr(e_code_1, 2, 3), 8.) <=813
Be very careful with text comparisons using Greater Than or Less Than operators. The algorithm is text so it goes:
0
1
10
11
12
13
...
2
20
21
...
20
@GARYV wrote:
I need help with coding ICD9 codes. These codes have four or five digits. For example, it can be E810 or E8100. I want to filter the range of these codes which can be E8100 to E8139 or E810 to E813. By using following code , I am missing out on five digit records starting with E813, E819 , E825. I am also missing records with four digits such as E810, E812 ,E813 or 819. In short, I would like to filter observations starting with first four digits as well as range starting those digits. Could anyone help with this? Thank you
Data WW.WW2; set WW.WW1; If E_CODE_1 ='.........' Then ECODE_MECH ='........' ; IF 'E810%'<= E_CODE_1 <='E813%' OR 'E815%'<= E_CODE_1<='E819%' OR 'E822%'<= E_CODE_1<='E825%' OR E_CODE_1 IN ('E9885','E9290') THEN ECODE_MECH = '1'; IF 'E814%'<= E_CODE_1 <= 'E814%' THEN ECODE_MECH= '2'; RUN;
use "=:" for example "if &icdvar{i} =:'030' then neuro=1" [actually @Reezaalready noted this] - i take this snippet from the sas macro at the following link which handles icd9 codes: http://www.seattlechildrens.org/research/child-health-behavior-and-development/mangione-smith-lab/me...
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.