我有一个带有患者诊断代码的数据集,我需要使用通配符来对他们的诊断进行分类。
patientID diagnosis cancer age gender
1 250.0 0 65 M
1 250.00 1 65 M
2 250.01 1 23 M
2 250.02 0 23 M
3 250.11 0 50 F
3 250.12 0 50 F
4. 513.01. 1 34 M
第5个字符为0或2的诊断需要归类为2型糖尿病,而以1和3结尾的诊断需要归类为1型糖尿病。但是,250.0只有4个字符,需要归类为类型2.
这在数据步骤中不起作用
if diagnosis_code ='250.%0' then t2dm = 1;
if diagnosis_code ='250.%1' then t1dm = 1;
答案 0 :(得分:2)
该测试不需要通配符。使用冒号修饰符测试代码前缀和substr()函数来测试第6个字符(第5个数字)。
if diagnosis_code='250.0' or
(diagnosis_code=:'250.' and substr(diagnosis_code,6)='0') then t2dm = 1;
if diagnosis_code=:'250.' and substr(diagnosis_code,6)='1' then t1dm = 1;
答案 1 :(得分:1)
如果可以使用PRXMATCH
函数完成语句,则DATA步骤中的通配符匹配。 PRX表示Perl正则表达式。
PRXMATCH (
正则表达式模式 ,
文本到评估 )
示例数据
data have; input
patientID diagnosis_code $ cancer age gender $; datalines;
1 250.0 0 65 M
1 250.00 1 65 M
2 250.01 1 23 M
2 250.02 0 23 M
3 250.11 0 50 F
3 250.12 0 50 F
4. 513.01. 1 34 M
run;
示例代码
data want;
set have;
t2dm = prxmatch('/^250\.\d*0$/', trim(diagnosis_code)) > 0;
t1dm = prxmatch('/^250\.\d*1$/', trim(diagnosis_code)) > 0;
run;
示例代码的注释
/
限制正则表达式^
在开头匹配250
匹配250 \.
匹配实际期间\d
匹配一个数字
\d*
匹配零个或多个数字0
1
匹配0或1
0$
1$
匹配最后的0或1 trim()
修剪文本以进行评估,以便最后的匹配工作> 0
匹配将在文本中返回 p 位置,如果不匹配则返回0, p > 0将逻辑评估为0或1并分配给标志变量