Почему мои значения смещаются, когда я вычисляю новую переменную в SAS? - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь использовать функцию YEAR () в SAS, чтобы извлечь год из даты, отформатированной в MMDDYY10.Однако, когда я вычисляю новый столбец с именем «year», все значения смещаются на одну строку.

Например, я хочу:

    Date          Year

    12/31/2014       2014
    06/25/2007       2007 

Но я получаю:

   Date         Year
  12/31/2014       . 
  06/25/2007      2014
     .           2007


 Data Clinic2;
   format datebp MMDDYY10.;
   year = YEAR(datebp);
   set Clinic; 
   run;

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Порядок утверждений важен.Ваша программа вычисляет год, а затем читает значение DATEBP из набора данных.Поскольку YEAR отсутствует в исходном наборе данных, оператор SET не изменяет значение year.

Именно поэтому в первом наблюдении отсутствует значение для YEAR, значение DATEBP еще не было прочитано.Причина, по которой остальные значения YEAR не пропущены, заключается в том, что SAS не сбрасывает переменные, полученные из входного набора данных, до пропущенных перед началом следующей итерации шага данных.Таким образом, для 2-й, 3-й и т. Д. Итерации вы рассчитываете YEAR из значения DATEBP, которое было прочитано на предыдущей итерации.Затем вы заменяете это значение DATEBP на значение из текущего наблюдения, считываемое оператором SET.

0 голосов
/ 27 января 2019

измените его на код ниже.ваш оператор set пришел первым из данных, которые нужно прочитать, чтобы выполнить расчет.Если вы сохраняете переменную перед оператором set, то ваша новая инициализация переменной начинается с пропущенного значения, а затем читается оператор set.

 Data Clinic2;
  set Clinic;
   year = YEAR(datebp);
  run;

Давайте попробуем разобраться, используя sashelp.class.Инициализация переменной началась еще до чтения данных до пропущенного значения.

/* wrong way*/
 data want;
age1 = age+5;
 set sashelp.class;
 run;

enter image description here

Инициализация переменной началась даже после чтения данных и не была назначенапропущенное значение.

 /* correct way*/
data want;
set sashelp.class;
 age1 = age+5;
run;

enter image description here

...