SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1141|回复: 5
打印 上一主题 下一主题

SAS宏在临床试验中应用-对1个变量的LOCF结转

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2005-8-24 14:50:04 | 只看该作者

SAS宏在临床试验中应用-对1个变量的LOCF结转

[code:d36a7]%macro locf(data=data,  /*原始数据集*/
                              out=out,  /*输出填补缺失值后的数据集*/
                              var=var  /*处理变量*/
                          );

data &out(drop=var1);
   set &data(keep=&var);
   var1=lag(&var);
   if &var=. then &var=var1 ;
run;
%mend;

data aa;
input id$ x1 x2;
datalines;
a1 11 12
a2 .  22
a3 31 .
a4 41 .
a5 .  52
;
run;

%locf(data=aa,out=out,var=x1);[/code:d36a7]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2005-8-29 22:20:39 | 只看该作者

辛苦啦

我以前怎么没发现这个LAG阿,多谢阿!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2005-8-30 08:10:29 | 只看该作者

to xystat

那你以前是怎么做的?愿意把代码贴上,和大家共享讨论否?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2005-9-14 15:22:20 | 只看该作者

还可以结合CALL SYMPUT()线程和SYMGET()函数使用

%macro locf (data,out,var);
data &out;
  set &data;
  call symput ("VAR",&var);
  if &var=. then &var=symget("VAR");
run;
%mend;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2005-10-1 09:06:51 | 只看该作者

thank you!

首先非常感谢collen提供的locf宏,但是我发现用于本例的x2时,只能得到一个值,还有缺失值的啊,怎么办呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2005-10-9 14:58:42 | 只看该作者

修改完chenxin8316的宏试试

%macro locf (data,out,var);
data &out;
set &data;
if &var^=. then call symput ("VAR",&var);
if &var=. then &var=symget("VAR");
run;
%mend;
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-9 10:21 , Processed in 0.140952 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表