美文网首页SAS编程
195:proc transpose和array处理缺失数据比较

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

作者: SASPRO的打工人生活 | 来源:发表于2023-02-19 23:38 被阅读0次

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

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

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

    相关文章

      网友评论

        本文标题:195:proc transpose和array处理缺失数据比较

        本文链接:https://www.haomeiwen.com/subject/femwkdtx.html