SAS编程

195:proc transpose和array处理缺失数据比较

2023-02-19  本文已影响0人  SASPRO的打工人生活

今天下班吃完饭后头很不舒服,看着直播什么也不做也没有感到放松,便在床上躺了一会儿,自己在迷迷糊糊中睡了快一个小时,但是还是能听到直播的声音的。习惯了下班后打开直播,可能觉得有点儿声音,就像有人在陪伴吧。

睡醒后心里感觉真的有点脆弱,这真的是一个奇怪的现象,在不该睡觉的时间睡醒后,总会感觉过了一天了,然后不知道睡着的时候发生了什么事,缺乏安全感。

有位读者问了一个问题,就是有位受试者缺失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的数据集。

上一篇下一篇

猜你喜欢

热点阅读