全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2820 6
2011-01-27
悬赏 50 个论坛币 已解决
小女初学SAS就遭遇research中实际数据,取个sample搬上来求教一下,别看下面文字很长,其实,对熟悉SAS的人来说应该真滴非常简单的。谢谢啦~

以下数据集含病人的家庭背景信息,血压,服药情况和是否是健康俱乐部会员等,变量有:id(20人), gender, birth_year,race, membership(健康俱乐部会员),bp(血压值), 部分病人有服药(没服药的就是缺失值)drug_date: 开始用药的时间; drug_type: IN/MET/TBE三种药

data trial1;
input id gender $ birth_year race $ member $ bp drug_date $ drug_type $;
cards;
1 M 1985 Asian Y 134 02/13/2006 IN
2 F 1984 White N 125 . .
3 F 1963 Black N 143 01/17/2005 MET
4 M 1972 White N 153 02/15/2006 TBE
5 F 1989 Asian Y 132 03/01/2007 IN
7 M 1978 Asian Y 135 . .
8 F 1958 White Y 142 . .
9 M 1968 Black Y 135 04/01/2007 MET
10 M 1978 White N 136 03/21/2005 IN
11 F 1989 Asian Y 138 02/21/2006 TBE
12 M 1986 Black N 143 . .
13 F 1987 Asian Y 132 . .
14 F 1976 White N 158 03/23/2007 IN
15 M 1969 Black N 145 04/26/2006 TBE
16 M 1980 Asian N 152 05/27/2006 MET
17 F 1985 Black Y 134 . .
18 M 1970 White Y 125 . .
19 F 1975 Asian N 135 02/21/2006 IN
20 M 1973 Black N 142 03/28/2006 MET
;
run;


1. 在input数据时如何把drug_date的length设为10?
2. 创建三个新变量年龄age(2011年减去birth_year),是否服药drug (如果原数据drug_date 或者 drug type 有一个 missing,则为N, 不缺失为Y), 服药的时长drug_time(现在日期减去drug_date开始服药的时间,但表示成“年”的形式,要不然数据值很大,缺失值的话为0年)

3. 现在我还有9个和以上数据集trial1一样的结构和变量名的数据集,trial2, trial3....trial 10, 和如何写一段sas macro, 来让以上的code自动地作用于其他9个数据集trial*
万分感谢!

最佳答案

baoaibaobao 查看完整内容

数据集中的drug_date $反正是需要修改,所以建议改为‘drug_date:mmddyy10.’ 然后用下面的代码...
二维码

扫码加我 拉你入群

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

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

全部回复
2011-1-27 17:20:16
数据集中的drug_date $反正是需要修改,所以建议改为‘drug_date:mmddyy10.’
然后用下面的代码...
复制代码
二维码

扫码加我 拉你入群

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

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

2011-1-27 18:08:47
首先你读入的数据集需要把两个日期变量的长度定义为10 (length birth_date $10)不然只读8位。

下面的代码我偷懒写的,不太规范标准,算是抛砖引玉吧,你可以参考一下。

%macro extractdata(i);
data trial&i.case ;
set trial&i;
age=2011-birth_year;
if drug_type='' then drug='N';
else drug='Y';
M=substr(drug_Date,1,2);
D=substr(drug_date,4,2);
Y=substr(drug_date,7,4);
drug_time=today()-mdy(m,d,y);
drop m d y;
run;
%mend extractdata;
%macro redo();
%do i=1 %to 20;
%extractdata(&i)
%end;
%mend redo;
%redo()
二维码

扫码加我 拉你入群

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

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

2011-1-27 18:37:41
麻烦求教一下,一开始数据集读入时如何确定一个日期变量长度为10?我加成这样,貌似不行,应该如何加?需要informat吗?
data trial1;
input id gender $ birth_year race $ member $ bp drug_date $10 drug_type $; (这样行不通)
shijz03 发表于 2011-1-27 18:08
首先你读入的数据集需要把两个日期变量的长度定义为10 (length birth_date $10)不然只读8位。

下面的代码我偷懒写的,不太规范标准,算是抛砖引玉吧,你可以参考一下。

%macro extractdata(i);
data trial&i.case ;
set trial&i;
age=2011-birth_year;
if drug_type='' then drug='N';
else drug='Y';
M=substr(drug_Date,1,2);
D=substr(drug_date,4,2);
Y=substr(drug_date,7,4);
drug_time=today()-mdy(m,d,y);
drop m d y;
run;
%mend extractdata;
%macro redo();
%do i=1 %to 20;
%extractdata(&i)
%end;
%mend redo;
%redo()
二维码

扫码加我 拉你入群

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

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

2011-1-27 19:24:37
data trial1;
infile datalines missover;
input id gender $ birth_year race $ member $ bp drug_date $10. drug_type $;
datalines;
1 M 1985 Asian Y 134 02/13/2006 IN
2 F 1984 White N 125
3 F 1963 Black N 143 01/17/2005 MET
4 M 1972 White N 153 02/15/2006 TBE
5 F 1989 Asian Y 132 03/01/2007 IN
7 M 1978 Asian Y 135
8 F 1958 White Y 142
9 M 1968 Black Y 135 04/01/2007 MET
10 M 1978 White N 136 03/21/2005 IN
11 F 1989 Asian Y 138 02/21/2006 TBE
12 M 1986 Black N 143
13 F 1987 Asian Y 132
14 F 1976 White N 158 03/23/2007 IN
15 M 1969 Black N 145 04/26/2006 TBE
16 M 1980 Asian N 152 05/27/2006 MET
17 F 1985 Black Y 134
18 M 1970 White Y 125
19 F 1975 Asian N 135 02/21/2006 IN
20 M 1973 Black N 142 03/28/2006 MET
;
run;

仅供参考
二维码

扫码加我 拉你入群

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

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

2011-1-27 22:14:16
baoaibaobao我知道你是个sas牛人,能不能赏脸光临一下我这个帖子,给我一点提示?多谢了!

http://www.pinggu.org/bbs/thread-1022002-1-1.html

2# baoaibaobao
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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