楼主: andy162639
5636 17

如何自动识别将数据库中字符型变量批量变为数值型变量 [推广有奖]

11
dealbada 发表于 2015-6-18 17:20:30 |只看作者 |坛友微信交流群
data a;
input id name $ drgif dn msd $;
cards;
1 zhang 1 1 white
2 li 2 1 red
3 chen 2 2 one
;
run;
proc contents data=a out=varname noprint varnum; run;
proc sql noprint;
select name into : varlist separated by ',' from varname;
quit;
%macro split/parmbuff;
%do i=1 %to 5;
  %let var&i=%scan(%bquote(&syspbuff),&i);
  %global var&i;
%end;
%mend;
%split(&varlist)
%macro check;
data b;
set a;
%do i=1 %to 5;
if anyalpha(&&var&i)=0 then &&var&i.._n=input(&&var&i,best.);
%end;
run;
%mend;
%check
proc print data=b;run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
andy162639 + 3 + 2 + 3 + 1 精彩帖子

总评分: 论坛币 + 3  学术水平 + 2  热心指数 + 3  信用等级 + 1   查看全部评分

使用道具

12
andy162639 发表于 2015-6-18 17:21:30 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-6-18 17:15
我这边正常的,你模拟调试一下。
不要意思,刚才理解错误,您的macro是可以的,还有个问题,比如数据库中某个变量绝大部分都是数字,但有个别是NK或者其他标示,能否把这类变量中NK变为缺失,然后也转化为数值型呢?求教,不甚感激。

data a;
input id name drgif dn msd;
cards;
1 zhang 1  1    白细胞
2 li        2  .     红细胞
3 chen  2  NK  1个
;
run;

使用道具

13
dealbada 发表于 2015-6-18 17:25:43 |只看作者 |坛友微信交流群
其他必要的不必要的data 可以根据需要clean up

使用道具

14
andy162639 发表于 2015-6-19 17:34:04 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-6-19 09:04
如此来说,你需要增加一数组的变量了;因为对于NG、NE,万一其他指标也有的话,也是不应被转换的。

我 ...
厉害!是的,我试试效率,您也是医药的?

使用道具

15
andy162639 发表于 2015-6-26 14:50:34 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-6-18 16:35
有意思,占位待编辑,以前宏中写过

当时是把整个数据集的整个字符型数值遍历测试了一边,总感觉效率也是 ...
非常高兴有机会跟您学习,还有个小问题咨询您,变量类型改变后,变量的位置也会有变化,有办法保证变量位置不变吗?不甚感激

使用道具

16
喵喵亲吻鱼 发表于 2015-12-13 20:22:26 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-6-18 11:47
如此来说,你需要增加一数组的变量了;因为对于NG、NE,万一其他指标也有的话,也是不应被转换的。

我 ...
请问您、如果有多个数据集(870个)时,如何批量处理呢。SAS新人,求教了。

使用道具

17
Tigflanker 发表于 2015-12-14 08:57:30 |只看作者 |坛友微信交流群
喵喵亲吻鱼 发表于 2015-12-13 20:22
请问您、如果有多个数据集(870个)时,如何批量处理呢。SAS新人,求教了。
额,只要一个数据集能做,只能剩下的869个数据集和第一个数据集情况一样(或者有微小的差异),都可以用宏做

因为宏不就是帮助我们自动写语句的啊,例如你870个数据集,名字都有规律,你在调用那个宏的时候,用一个%do %to就可以循环调用,变动的只是数据集名字的宏参数

使用道具

18
喵喵亲吻鱼 发表于 2015-12-15 17:16:38 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-12-14 08:57
额,只要一个数据集能做,只能剩下的869个数据集和第一个数据集情况一样(或者有微小的差异),都可以用宏 ...
谢谢啦。问题已经解决。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-4 09:25