楼主: yellowriver
3303 7

[原创博文] 请求帮我这段sas数据集导入+合并的code纠错一下 [推广有奖]

  • 0关注
  • 4粉丝

VIP

博士生

38%

还不是VIP/贵宾

-

威望
0
论坛币
10028 个
通用积分
22.7632
学术水平
21 点
热心指数
26 点
信用等级
19 点
经验
3133 点
帖子
164
精华
0
在线时间
170 小时
注册时间
2007-11-4
最后登录
2019-5-18

30论坛币
有三个数据集需要导入SAS并且merge成一个新的数据集,这对高手一定很简单,我自己看了一些教材,从最开始导入数据开始写了一下,不知有没有错,附件中为这些数据集内容的缩略图,非常感谢。

1.sas data file "background1.sas7bdat"主要是病人的家庭背景信息,变量有:id(20人), gender, race, membership(健康俱乐部会员),birth_year
2. sas data file "bp1.sas7bdat"主要是病人血压值,变量有:id (20人),bp(血压值), date( 检测血压的日子)
3. sas data file "drug1.sas7bdat"主要是病人用药情况,变量有:id: 1-20个人中只有3,8,2,15,13,7,4才有被建议服降压药,所以这个数据集数据小于前面两个,drug: IN/MET/TBE三种药, date_begin: 开始用药的时间
我现在想把以上三个数据集通过id合并为一个新的数据库用于以后的分析,应该怎么做?但并不是一对一的合并,因为第三个数据集数量小于第一二两个。我写的代码如下,大家帮我改进一下?感谢!
  1. LIBNAME TRY1 "C:\DOCUMENT\DATA\";
  2. /*三个sas file: background1, bp1, drug1都存在我以上这个目录里*/
  3. /*第一步要sort id*/
  4. proc sort data=TRY1.background1;
  5. by id;
  6. proc sort data=TRY1.bp1;
  7. by id;
  8. proc sort data=TRY1.drug1;
  9. by id;

  10. /*第二步开始根据id来merge,并创造新数据集TRY1.NEW1*/
  11. data TRY1.NEW1;
  12. merge TRY1.background1
  13. TRY1.bp1
  14. TRY1.drug1;
  15. by id;

  16. /*第三步proc contents是干嘛的?*/
  17. proc contents data=TRY1.NEW1 varnum;
  18. proc means data=TRY1.NEW1 N Nmiss min max maxdec=2;
  19. run;

  20. /*怎么样可以用proc print data=TRY1.NEW1看新数据集的前5个记录???*/
  21. /*之后的话我想调用NEW1, 该去哪里找? 是永久保存吗?*/
复制代码

background1.png (10.93 KB)

background1.png

bp1.png (7.05 KB)

bp1.png

drug1.png (3.6 KB)

drug1.png

最佳答案

baoaibaobao 查看完整内容

SAS这几个逻辑库只有WORK是临时库,所以只要把数据集放在其他库里就行,如把try1.new1放在sashelp中其实如果try1是个永久库(也就是下次再运行SAS时仍然存在)那try1.new1就表示永久数据集了。 我一般的做法是,自己建立一个永久的逻辑库,每次想要永久保存的数据集都放在这个里面。
关键词:sas数据集 code 数据集 ODE COD membership 俱乐部 缩略图 会员 file

本帖被以下文库推荐

沙发
baoaibaobao 发表于 2011-1-27 14:20:13 |只看作者 |坛友微信交流群
yellowriver 发表于 2011-1-27 22:11
baoaibaobao谢谢啦,那你知道如何把这个a数据永久保存,并下次调用的code吗?

谢谢啦!

6# baoaibaobao
SAS这几个逻辑库只有WORK是临时库,所以只要把数据集放在其他库里就行,如把try1.new1放在sashelp中
  1. data sashelp.new1;set try1.new1;run;
复制代码
其实如果try1是个永久库(也就是下次再运行SAS时仍然存在)那try1.new1就表示永久数据集了。
我一般的做法是,自己建立一个永久的逻辑库,每次想要永久保存的数据集都放在这个里面。

使用道具

藤椅
yellowriver 发表于 2011-1-27 16:57:11 |只看作者 |坛友微信交流群
各位高手,帮帮我吧!
1# yellowriver

使用道具

板凳
Isscaliu 发表于 2011-1-27 17:18:40 |只看作者 |坛友微信交流群
在merge的时候对最小的数据用in就行了。
只看前就是数据 加obs=
It was the best of times, it was the worst of times.

使用道具

报纸
yellowriver 发表于 2011-1-27 17:24:03 |只看作者 |坛友微信交流群
非常感谢您的回复,能不能在我原先的code上帮我编一下?您这样讲我还是有点不明白。谢谢啦!

你说“在merge的时候对最小的数据用in就行了”, 这是什么时候加in?
还有就是我想只print out前10个obs,该在print out data=....后哪里加?


劳驾您了!
Isscaliu 发表于 2011-1-27 17:18
在merge的时候对最小的数据用in就行了。
只看前就是数据 加obs=

使用道具

地板
yellowriver 发表于 2011-1-27 20:03:05 |只看作者 |坛友微信交流群
你说的是这样吗?我用noobs想删掉obs号
proc print data=TRY1.NEW1 obs=10 noobs;
run;


我运行了,还是出错,求指导!

Isscaliu 发表于 2011-1-27 17:18
在merge的时候对最小的数据用in就行了。
只看前就是数据 加obs=

使用道具

7
baoaibaobao 发表于 2011-1-27 21:40:55 |只看作者 |坛友微信交流群
yellowriver 发表于 2011-1-27 20:03
你说的是这样吗?我用noobs想删掉obs号
proc print data=TRY1.NEW1 obs=10 noobs;
run;


我运行了,还是出错,求指导!

Isscaliu 发表于 2011-1-27 17:18
在merge的时候对最小的数据用in就行了。
只看前就是数据 加obs=
  1. proc print data=a(firstobs=1 obs=10) noobs;
  2. run;
复制代码

使用道具

8
yellowriver 发表于 2011-1-27 22:11:00 |只看作者 |坛友微信交流群
baoaibaobao谢谢啦,那你知道如何把这个a数据永久保存,并下次调用的code吗?

谢谢啦!

6# baoaibaobao

使用道具

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

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

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

GMT+8, 2024-9-20 06:40