sas, объединить, неизвестные наборы данных наблюдений - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужна помощь в чтении кода ниже. Я не уверен, что конкретные части в этом коде делают. Например, что делает ( firstobs = 2 keep = column3 rename = (column3 = column4) )?

Кроме того, что делает ( obs = 1 drop = _all_ );?

Я также не использовал column5 = ifn( first.column1, (.), lag(column3) ); раньше. Что это делает?

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

data out.dataset1;
set out.dataset2;
by column1;
WHERE column2 = 'N';
set out.dataset1 ( firstobs = 2 keep = column3 rename = (column3 = column4) )
    out.dataset1 ( obs = 1 drop = _all_ );
FORMAT column5 DATETIME20.;
FORMAT column4 DATETIME20.;
column5 = ifn( first.column1, (.), lag(column3) );
column4 = ifn(  last.column1, (.), column4 );
IF first.column1 then DIF=intck('dtday',column4,column3);
ELSE DIF= intck('dtday',column5,column3); 
format column6 $6.; 
IF first.column1
OR intck('dtday',column5,column3) GT 20 THEN column6= 'HARM';
ELSE column6= 'REPEAT'; 
run;

Ответы [ 3 ]

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

В основном ваш шаг данных использует функцию LAG () для просмотра одного наблюдения и дополнительный оператор SET для просмотра одного наблюдения.

Затем используются вызовы функций IFN (), чтобы удостовериться, что пропущенные значения назначаются на границе группы.

Затем эти вычисленные даты PREV и NEXT используются для вычисления переменной DIF.

Обратите внимание, чтобы это работало, вы должны ссылаться на один и тот же входной набор данных в двух разных операторах SET (набор данных, использованный в последнем случае с опциями набора данных obs=1 и drop=_all_) на самом деле не должно быть одинаковым, поскольку он не читает какие-либо фактические данные, он просто должен иметь хотя бы одно наблюдение).

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

(firstobs = 2 keep = DPD_CLOSE_OF_BUSINESS_DT rename = (DPD_CLOSE_OF_BUSINESS_DT = Next_COB_DT)) делать?

Здесь код firstobs = 2 говорит SAS для чтения данных из 2-го наблюдения в наборе данных. а также с помощью опции переименования, пытающейся изменить имя переменной.

(obs = 1 drop = _all _);

obs = 1 читает только 1-ый obs в наборе данных. Если вы укажете obs = 2, будет прочитано до 2-х obs.

drop = _all_, отбрасывает все ваши переменные.

Firstobs: Можно прочитать часть данных. Если вы укажете Firstobs = 10, он начнет читать данные 10-го наблюдения.

Obs: Если указать obs = 15, то до 15-го числа obs данные будут считаны.

Если вы запустите приведенную ниже таблицу, она даст вам 3 наблюдения (от 2-го до 4-го) в выходном результате.

Пример *; * один тысяча двадцать-одна

DATA INSURANCE;
INFILE CARDS FIRSTOBS=2 OBS=4;
INPUT NAME$ GENDER$ AGE INSURANCE $;
CARDS;
SOWMYA  FEMALE  20  MEDICAL
SUNDAR  MALE    25  MEDICAL
DIANA   FEMALE  67  MEDICARE
NINA    FEMALE  56  MEDICAL
RUN;
0 голосов
/ 04 сентября 2018

Похоже, вам нужно узнать о языке SAS! Этот ряд вещей, происходящих в скобках, является опциями шага данных Вы можете использовать эти опции, когда бы вы ни ссылались на таблицу, даже в proc sql Варианты у вас есть: firstobs : Это запускает подачу данных на записи ввода в вашем случае 2, это означает, что SAS запустится на таблице на второй записи.

keep : при этом будут использоваться только поля в списке, а не все поля в таблице rename = rename переименует поле, поэтому оно работает как псевдоним в SQL

OBS = ограничит количество записей, которые вы извлекаете из таблицы, например top или limit в SQL

DROP = удалит поля, выбранные из таблицы в вашем случае все используется, что означает, что он удаляет все поля.

что касается функций:

LAG сохраняет значение из предыдущей записи для поля, которое вы поставили в скобках, поэтому DPD_CLOSE_OF_BUSINESS_DT

INF = Работает как случай или если. По сути, вы создаете условие в 1-м аргументе, а затем 2-й аргумент применяется, когда ваше условие в 1-м аргументе истинно, 3-й аргумент выполняется в том случае, если ваше условие в 1-м аргументе ложно.

Таким образом, чтобы ответить на этот вопрос, если это первая запись для переменной SOR_LEASE_NBR, тогда поле Prev_COB_DT будет. в противном случае это будет предыдущее значение DPD_CLOSE_OF_BUSINESS_DT.

Лучший совет, который я могу вам дать, - это начать поиск в SAS и имя функции, которая вас интересует, что она делает, тогда это вопрос инкапсуляции!

Надеюсь, это поможет!

...