楼主: 8112mmw
700 0

[学习分享] Retain语句在临床试验中的应用 [推广有奖]

  • 0关注
  • 3粉丝

学术权威

23%

还不是VIP/贵宾

-

威望
0
论坛币
22310 个
通用积分
134.6034
学术水平
15 点
热心指数
23 点
信用等级
4 点
经验
163999 点
帖子
2799
精华
0
在线时间
2249 小时
注册时间
2014-10-27
最后登录
2024-5-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
1.数据核查  这个问题是昨天同事问到我关于数据核查的问题。简单问题描述:核查出受试者与某访视相同访视日期的访视记录,并按照“受试者编号+访视日期+相同的访视名称”组合一条query。如图,如001,query应该为:“001 2017-01-19 第2周期\第3周期”。

    同事跟我描述了她的做法,蒙圈了。于是我说给我数据我自己想下。刚拿到这个问题,我想的是visitdate和visit都转置,转成数据中一人一条记录,然后数组处理,但这个转置数据处理比较麻烦,且如果不是连续访视的日期相同,这个数组处理也是有问题的,在处理临床试验数据时,可能性总得多想几条。于是转换思路,访视日期如果相同,就会有2或以上记录,数数+retain就可以处理了。程序如下:
*模拟数据;
data test;
input subjid :$10.visit :$10. visitnum visitdate yymmdd10. aval clsig $10.;
format visitdate yymmdd10.;
cards;
001  第1周期1 2017-01-12 12 正常
001  第2周期2 2017-01-19 19 异常
001  第3周期3 2017-01-19 11 正常
001  第4周期4 2017-02-03 13 正常
001  第5周期5 2017-02-10 4  异常
002  第1周期1 2017-04-01 13 正常
002  第2周期2 2017-04-08 16 正常
002  第3周期3 2017-04-08 19 异常
002  第4周期4 2017-04-08 17 异常
002  第5周期5 2017-05-10 18 异常
;
run;
*数数,筛重;
proc sql;
create table test1 as
  select * ,count(subjid) as n from test
   group bysubjid,visitdate
    having n ge 2
     order by subjid,visit;
quit;
*组合query;
data test2;
retain subjid conj;
length conj $100query $100;
set test1;
by subjid visit;
if first.subjid then conj=visit;
else conj=catx("/",conj,visit);
query=catx("",subjid,put(visitdate,yymmdd10.),conj);
if last.subjid ;
keep subjid query;
run;

不追求高大上的宏,简单就好。
2.建基线  临床试验报告中安全性分析部分总有很多报表需要分析与基线数据比较的报表,定量或定性资料的均如此。如定量资料,分析各个访视相对基线的改变值得均数,中位数等,定量资料分析各个访视与基线的交叉表等。而这部分数据皆是BDS数据集,简单的说就是流水账式记录。不管做定量或者定性资料均需要建基线变量,且将基线值填充到每个访视。因此retain是非常管用的办法。刚开始做这行的时候很费劲的建个基线数据集,再和其他访视的数据集进行merge。在help文档中“Causes a variable that is created by an INPUT or assignmentstatement to retain its value from one iteration of the DATA step to the next”。也就是说input或赋值语句创建一个变量,将其值从数据步的一次迭代保留到下一次迭代中。
忽略基线的定义,这里我们就认为第1周期的值为基线值。处理如下:
*****建立基线*****;
proc sort data=test;by subjid visitnum;run;
data test3;
retain subjid visit visitnum visitdate avalclsig;
retain base1 base2;
set test;
by subjid visitnum;
if first.subjid then do;
base1=aval;
base2=clsig;
end;
CHG=aval-base1;
run;

3.改变变量顺序 在做SDTM或ADAM数据集时,我们需要按照变量定义的顺序在数据集中呈现或者变量很多的情况下,我们需要把重要的变量放在最前面以便一目了然的查阅,因此需要改变变量的顺序。变量的顺序,我们可以通过用length语句,或者创建变量的顺序来控制变量在数据集中的顺序,但是往往不需要重新定义变量属性和长度或者创建变量,又或者是多个数据集merge的数据集,这个length或创建变量的方式就可能效率太低或者达不到目的。这时retain就可以轻松排列变量。按顺序列出重要变量即可。
**********改变变量顺序**********;
data test4;
retain subjid visit visitnum base1 base2 visitdate aval clsig;/*变量顺序*/
set test3;
run;


二维码

扫码加我 拉你入群

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

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

关键词:RETAIN 临床试验 RET ETA assignments

本帖被以下文库推荐

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

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

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

GMT+8, 2024-5-1 08:03