今天下班吃完饭后头很不舒服,看着直播什么也不做也没有感到放松,便在床上躺了一会儿,自己在迷迷糊糊中睡了快一个小时,但是还是能听到直播的声音的。习惯了下班后打开直播,可能觉得有点儿声音,就像有人在陪伴吧。
睡醒后心里感觉真的有点脆弱,这真的是一个奇怪的现象,在不该睡觉的时间睡醒后,总会感觉过了一天了,然后不知道睡着的时候发生了什么事,缺乏安全感。
有位读者问了一个问题,就是有位受试者缺失3个肿瘤评估的访视,但是自己现在只输出了一个,如何把3个肿瘤评估的访视都输出出来。
具体情况我不知道是什么样,她也没有给我更具体的描述,也没有给我看实际数据。但是我觉得她是想创建一个dummy数据集,只不过值为空。如果整个试验有56次肿瘤评估访视,那么56次都得输出。
刚好今天看到相关内容,那就写下来,说不定能解决她的问题。
proc transpose对于转置数据集非常有用,而是常用的一种做法,对于部分缺失的数据,我们可以通过id解决。下面这句数据受试者S101缺失访视2的数据,但是受试者S202未缺失。
我们通过转置,就能获得各个访视受试者SBP的数据,注意的是,如果只有by和var选项,数据会自动顶上去,不符合我们的期望,也就是受试者S101访视2的数据并不是下图展示的那样,它用的是访视3的数据。
为了避免上面的那种情况,我们可以用上id选项。
但是如果所有受试者都缺失访视2的数据呢?那么proc transpose就没有那么智能了,并不会输出任何关于访视2的数据,这时候我们就可以通过array解决。
data TEST2;
input subject $ visit sbp;
datalines;
S101 1 160
S101 3 140
S101 4 130
S101 5 120
S202 1 141
S202 3 161
S202 4 171
S202 5 181
;
run;
data test2_2;
set TEST2;
by subject;
keep subject visit1-visit5;
retain visit1-visit5;
**** DEFINE ARRAY TO HOLD SBP VALUES FOR 5 VISITS.;
array sbps {5} visit1-visit5;
**** AT FIRST SUBJECT, INITIALIZE ARRAY TO MISSING.;
if first.subject then do i = 1 to 5;
sbps{i} = .;
end;
*** AT EACH VISIT LOAD THE SBP VALUE INTO THE PROPER SLOT
**** IN THE ARRAY.;
sbps{visit} = sbp;
**** KEEP THE LAST OBSERVATION PER SUBJECT WITH 5 SBPS.;
if last.subject;
run;
通过上面的这段代码,就能输出一个dummy,具有访视2的数据集。
网友评论