Заменить пропущенные значения в SAS определенным условием - PullRequest
0 голосов
/ 09 мая 2018

У меня большой набор данных с именем Плоскости с пропущенными значениями в Задержка прибытия (Arr_Delay) . Я хочу Замените эти пропущенные значения на Среднее время задержки на Определенном маршруте (Origin - Dest) на Определенном Carrier.

Настоящим является образец набора данных: -

date      carrier  Flight    tailnum    origin  dest  Distance Air_time Arr_Delay

01-01-2013  UA     1545       N14228    EWR      IAH    1400    227        17
01-01-2013  UA     1714       N24211    LGA      IAH    1416    227        .
01-01-2013  AA     1141       N619AA    JFK      MIA    1089    160        .
01-01-2013  EV     5708       N829AS    LGA      IAD    229     53        -18
01-01-2013  B6     79         N593JB    JFK      MCO    944     140        14
01-01-2013  AA     301        N3ALAA    LGA      ORD    733     138        .
01-01-2013  B6     49         N793JB    JFK      PBI    1028    149        .
01-01-2013  B6     71         N657JB    JFK      TPA    1005    158        19
01-01-2013  UA     194        N29129    JFK      LAX    2475    345        23
01-01-2013  UA     1124       N53441    EWR      SFO    2565    361       -29

код, который я пробовал: -

 Proc stdize data=cs1.Planes reponly method=mean out=cs1.Complete_data;
 var Arrival_delay_minutes;                                                                                                                                                                                                                                     
 Run; 

Но, как говорится в моей проблеме ... я хочу получить среднее значение по конкретному маршруту и ​​конкретному перевозчику за отсутствующее значение. Пожалуйста, помогите мне в этом!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вам просто нужно отсортировать таблицу cs1.Planes по происхождению, адресу и транспорту перед запуском Proc stdize и добавить by origin dest carrier;, чтобы выполнить желаемую группировку. Единственный случай, когда значения останутся пропущенными, это когда нет других значений для этого перевозчика / маршрута.

Вы можете найти документацию SAS здесь и доступные опции здесь .

Код:

data have;
informat date ddmmyy10.;
format date ddmmyy10.;
input 
date      carrier $ Flight    tailnum $   origin $  dest $  Distance Air_time Arr_Delay;
datalines;
01-01-2013  UA     1545       N14228    EWR      IAH    1400    227        17
01-01-2013  UA     1714       N24211    LGA      IAH    1416    227        .
01-01-2013  AA     1141       N619AA    JFK      MIA    1089    160        .
01-01-2013  EV     5708       N829AS    LGA      IAD    229     53        -18
01-01-2013  B6     79         N593JB    JFK      MCO    944     140        14
01-01-2013  AA     301        N3ALAA    LGA      ORD    733     138        .
01-01-2013  B6     49         N793JB    JFK      PBI    1028    149        .
01-01-2013  B6     49         N793JB    JFK      PBI    1028    149        15
01-01-2013  B6     71         N657JB    JFK      TPA    1005    158        19
01-01-2013  UA     194        N29129    JFK      LAX    2475    345        23
01-01-2013  UA     1124       N53441    EWR      SFO    2565    361       -29
;
run;

proc sort data=work.have; by origin  dest carrier; run;

Proc stdize data=work.have reponly method=mean out=work.Complete_data ;
 var Arr_Delay;  
 by  origin  dest carrier ;
 Run; 
0 голосов
/ 09 мая 2018

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

Proc means data=cs1.Planes  noprint;
 var Arr_Delay;
 class carrier origin dest;
 output out=mean1;
Run;

proc sort data=cs1.Planes;
  by carrier origin dest;
run;

proc sort data=mean1;
  by carrier origin dest;
run;

data cs1.Complete_data(drop=Arr_Delay1 _stat_);
  merge cs1.Planes(in=a) mean1(where=(_stat_="MEAN")
                    keep=carrier origin dest Arr_Delay _stat_
                    rename=(Arr_Delay = Arr_Delay1) in=b);
  by carrier origin dest;
  if a;
  if Arr_Delay =. then Arr_Delay=Arr_Delay1;
run;
...