Добавление записи в SAS на основе значения столбца - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь добавить дополнительную запись в набор данных SAS, если в столбце «Количество» нет записи со значением 1 для определенного субъекта c и соответствующего теста. Запись будет иметь добавленное значение столбца «Тест», а также «Отсутствует» для столбца «Значение» и 1 для счетчика.

Вот данные:

Subject            Test               Value                 Count
001                Test1              Normal                0
001                Test2              Normal                0
001                Test2              High                  1
002                Test1              Normal                0
002                Test2              Normal                0
002                Test2              Normal                1

Я бы хотел бы создать следующий набор данных:

Subject            Test               Value                 Count
001                Test1              Normal                0
001                Test1              Missing               1
001                Test2              Normal                0
001                Test2              High                  1
002                Test1              Normal                0
002                Test1              Missing               1
002                Test2              Normal                0
002                Test2              Normal                1

Любое понимание будет оценено.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Я бы просто использовал union all:

proc sql;
    select subject, test, value, count
    from data d
    union all
    select subject, test, 'Missing', 1
    from data d
    group by subject, test
    having max(count) = 0;
2 голосов
/ 11 февраля 2020

Вы можете сделать это, используя retain и first, last:

proc sort data=have; /*sort data to use first. and last.*/
by Subject Test;
run;

data want(drop=check_count);
   set have;
   By Subject Test;
   retain check_count;/*in this variable we will store 1 - if there is count that equals to 1 in subject and test group, and 0 - if there is no  count that equals to 1 in subject and test group*/
   if first.test then check_count=0; /*init variable for new test group*/
   if count = 1 then check_count = 1; /*change value when there is count = 1*/
   output;
   if last.test and check_count=0 then do;
      Value="Missing";
      Count=1;
      output;
   end;
run;
...