楼主: 龙潭丰乐
2536 10

从多行读取观测值 [推广有奖]

  • 14关注
  • 4粉丝

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
0
学术水平
25 点
热心指数
29 点
信用等级
14 点
经验
8652 点
帖子
458
精华
0
在线时间
466 小时
注册时间
2011-11-20
最后登录
2022-1-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
E 1232 JOHN SMITH      15OCT1988
S 1988 34,456
S 1989 37,453
S 1990 40,710
The header record (E) contains data for employee ID, name, andemployment date 。
There is one salarydetail record (s) for each yearthe employee has worked for the company.
Create a SAS data set named HISTORY that contains the variables IDNUM,NAME, YEAR, and SALARY.
like:
  IDNUM     NAME     YEAR     SALARY   
  1232      JOHN SMITH     1988      34,456   
  1232      JOHN SMITH     1989      37,453   
  1232      JOHN SMITH     1990      40,710   


二维码

扫码加我 拉你入群

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

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

关键词:观测值 employment Variables Employee Variable employee company Create record

沙发
wangfengxi 发表于 2012-11-16 10:37:16 |只看作者 |坛友微信交流群
/或#

使用道具

藤椅
bobguy 发表于 2012-11-16 11:29:00 |只看作者 |坛友微信交流群
SAS data step can deal with all sort input format. Here is a way to use the trailing @ to control different inputing streams.

data tmp;
length IDNUM 8 NAME $16 YEAR SALARY 8 chk $1;
retain IDNUM NAME;
informat SALARY comma7.;
format SALARY comma7.;
infile cards;
input @1 chk 1 @;
if chk ='E' then input IDNUM 3-6 name 8-23;
else if chk='S' then do;
   input YEAR 3-6 SALARY;
   output;
end;
cards;
E 1232 JOHN SMITH      15OCT1988
S 1988 34,456
S 1989 37,453
S 1990 40,710
E 2222 JOHN DOE        15OCT1988
S 1988 34,456
S 1989 37,453
;
proc print;run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
若水烟寒 + 1 + 1 + 1 观点有启发

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

使用道具

板凳
龙潭丰乐 学生认证  发表于 2012-11-16 11:56:42 |只看作者 |坛友微信交流群
wangfengxi 发表于 2012-11-16 10:37
/或#
数据集中每个name的salarydetail record(s)不一样

使用道具

报纸
若水烟寒 发表于 2012-11-16 16:22:45 |只看作者 |坛友微信交流群
想了半天用了这种方法……我觉得data步特别不方便……TT还在学习中……

data a (keep=idnum name year salary);
input type $ idnum1 name1 $ 8-18;
if type='E' then do; idnum=idnum1; name=name1; retain idnum; retain name; delete; end;
else do; year=idnum1; salary=input(name1,comma10.); end;
format salary comma10.;
cards;
E 1232 JOHN SMITH      15OCT1988
S 1988 34,456
S 1989 37,453
S 1990 40,710
E 2222 JOHN DOE        15OCT1988
S 1988 34,456
S 1989 37,453
;
run;

使用道具

地板
若水烟寒 发表于 2012-11-16 16:26:24 |只看作者 |坛友微信交流群
bobguy 发表于 2012-11-16 11:29
SAS data step can deal with all sort input format. Here is a way to use the trailing @ to control di ...
囧啊……之前本来想用行指针#,但是死活不知道怎么把行指针往上移一行……@是个好东西,受益匪浅……学习啦~

使用道具

7
zkymath 在职认证  发表于 2012-11-16 16:47:32 |只看作者 |坛友微信交流群
使用单  行保持符@;

使用道具

8
wangfengxi 发表于 2012-11-16 20:07:00 |只看作者 |坛友微信交流群
用手机上,没看仔细。两个input,hold住第一个。

使用道具

9
龙潭丰乐 学生认证  发表于 2012-11-17 23:04:37 |只看作者 |坛友微信交流群
wangfengxi 发表于 2012-11-16 20:07
用手机上,没看仔细。两个input,hold住第一个。
恩呢  谢了  两个input很强大啊

使用道具

10
wangfengxi 发表于 2012-11-18 00:04:45 |只看作者 |坛友微信交流群

RE: 从多行读取观测值

龙潭丰乐 发表于 2012-11-17 23:04
恩呢  谢了  两个input很强大啊
input #1 @3 idnum 4. @8 name $ 10.@;
input #2 @3 year 4. @8 salary comma6.;output;
input #3 @3 year 4. @8 salary comma6.;output;
input #4 @3 year 4. @8 salary comma6.;output;

使用道具

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

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

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

GMT+8, 2024-4-28 12:00