楼主: derekzzy
1331 2

[问答] SAS INPUT格式化输入的一个问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

5%

还不是VIP/贵宾

-

威望
0
论坛币
20 个
通用积分
0.0319
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
134 点
帖子
13
精华
0
在线时间
60 小时
注册时间
2020-6-24
最后登录
2022-1-13

楼主
derekzzy 发表于 2020-8-12 16:34:48 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
想请教一下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这样的格式?
二维码

扫码加我 拉你入群

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

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

关键词:Input put 格式化 Table test

沙发
涂涂2020 在职认证  发表于 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缺失,还请其他大大帮忙补充。

藤椅
wsyxh 发表于 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;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-28 17:19