Изменение строк в SAS на основе столбца Y / N - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь изменить столбцы в SAS для определенных строк с определенным условием.

Это информация, которая у меня сейчас есть:

patientNum    siteNum   diseaseType   haveDiseaseD
001           12        A             N
002           14        B             N
003           15        C             Y

Я бы хотел, чтобы новая таблица выглядела следующим образом:

patientNum    siteNum   diseaseType   
001           12        A             
002           14        B             
003           15        D

Так что я просто хочу изменить таблицу и переключить информацию в столбце «DiseaseType», если у любого пациента есть «Да» в столбце «HaveDiseaseD».

Логика будет выглядеть примерно так:

data have;
 set want;
   do i = 1 to dim(patientNum);
   if haveDiseaseD(i) == 'Y' then diseaseType(i) = D
      else diseaseType(i) = diseaseType(i)
run;

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

SAS автоматически перебирает данные строка за строкой. Вам не нужно указывать массивы или размеры. Поскольку вам нужно изменить только одно значение столбца, если другой столбец соответствует условию, ваша программа будет содержать только четыре строки кода.

data have;
    set want;
    if(haveDiseaseD = 'Y') then diseaseType = 'D';
run;
0 голосов
/ 06 сентября 2018

Подумайте о том, чтобы сохранить первоначальный типtype. Кто-то обязан спросить о распространенности или распространении переопределенных категорий болезней.

data want;
  set have (rename=diseaseType=diseaseType_original);
  if haveDiseaseD = 'Y' 
    then diseaseType = 'D';
    else diseaseType = diseaseType_original;
run;
0 голосов
/ 05 сентября 2018

SAS использует = для оператора сравнения, а не ==. Шаг SAS DATA представляет собой неявную петлю, поэтому вам не нужно явно зацикливаться на пациентах. На таком простом шаге, как этот, оператор SET выполняется один раз за каждую итерацию цикла и читает запись из набора данных HAVE. Эта запись обрабатывается и затем выводится. В нижней части шага DATA имеется подразумеваемый оператор OUTPUT.

Ваш псевдокод очень близок к реальному коду SAS:

data want ;
  set have ;
  if haveDiseaseD = 'Y' then diseaseType = 'D' ;
run ;
...