全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1285 2
2020-08-12
想请教一下SAS里面, INPUT格式化输入的问题
现有两行数据,代表两个学生的四门课的成绩,每门课都是两位整数加一位小数,例如Fred的四门成绩是86.9,75.0, 61.1和98.0,然后wilma同学第三门课成绩为空。
Fred 869750611980
Wilma 921432 653
我INPUT里面怎样写才能实现下图table的格式?
NAME   TEST1  TEST2  TEST3  TEST4
Fred      86.9     75.0      61.1     98.0
Wilma    92.1     43.2                 65.3


主要困惑有二:该如何处理没有空格隔开且起始位置不同的数据?该如何实现吧869输出成86.9这样的格式?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-9-21 14:32:17
暂时只想到这个笨方法,如果你的四门成绩有一门缺失就有一个空格的话(4门缺失就是4个空格),考虑到了姓名和成绩之间也是空格隔开,在读取数据的时候很难和后面的区分开来,所以先作为一个变量全部读进来再做处理。
data a;
input raw $50.;
cards;
Fred 869750611980
Wilma 921432 653
aa     
bb 586  894528
cc  258 568
dd 695  789
;run;

%macro mm;
data b;
format test1-test4 12.1;
set a;
name=substr(raw,1,find(raw," ")-1);
test=substr(raw,find(raw," ")+1,20);
testnew=tranwrd(test," ","   ");
%do i=1 %to 4;
        if substr(testnew,&i*3-2,2)^=''
                then test&i=input(substr(testnew,&i*3-2,2),12.)+input(substr(testnew,&i*3,1),12.)*0.1;
%end;
run;
%mend;
%mm;
如果两个成绩之间有两个成绩缺失(例dd),但是只有一个空格的话emmm那情况就比较复杂了,需要判断四门成绩abcd中到底是bc缺失还是bd缺失,还请其他大大帮忙补充。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-9-22 13:08:51
缺失的数据用小数点.代替即可
Data yours;
INPUT NAME $  TEST1  TEST2  TEST3  TEST4;
cards;
Fred      86.9     75.0      61.1     98.0
Wilma    92.1     43.2        .         65.3
;
Run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群