- data a;
- input id name $ drgif $ dn msd $;
- cards;
- 1 NGN 1 1 白细胞
- 2 NEC NE 1 红细胞
- 3 NG NG 2 1个
- ;
- run;
- %macro zhuan(in = ,out = );
- %let rc = %sysfunc(open(&in.(keep = _char_)));
- %let cn = %sysfunc(attrn(&rc.,nvars));
- %let rc = %sysfunc(close(&rc.));
- data &out.;
- set &in.(in = in) &in. end = last;
- array allchar _char_;
- array newchar newchar1 - newchar&cn.;
- array tmpchar $ tmpchar1 - tmpchar&cn.;
- array temp temp1 - temp&cn.;
- retain temp;
- prx = prxparse('/[^\d\.\s\-]/');
- if last then call execute('data &out.(drop = tmp:);set &out;');
- do over allchar;
- tmpchar = ifc(upcase(allchar) in ('NE','NG'),'',allchar);
- if in then temp = max(temp,prxmatch(prx,tmpchar));
- else if ~temp then newchar = input(tmpchar,best.);
- if last then do;
- if ~temp then call execute(cat('drop ',vname(allchar),';rename ',vname(newchar),' = ',vname(allchar),';'));
- else call execute(cat('drop ',vname(newchar),';'));
- end;
- end;
- if last then call execute('run;');
- if ~in;
- drop temp: prx;
- run;
- %mend zhuan;
- %zhuan(in = a, out = b);
我考虑过对于整个col,只有NG、NE和数值的情况,才进行转换。
你应该是药厂或者CRO的兄弟吧,虽然NG、NE不会出现在名称指标中,不过还是要谨慎些。


雷达卡




京公网安备 11010802022788号







