按特定条件替换SAS中缺少的值

按特定条件替换SAS中缺少的值,sas,proc-sql,Sas,Proc Sql,我有一个名为Planes的大型数据集,其中到达延迟(Arr\u Delay)中缺少值 用特定路线(起点-终点)上的平均延迟替换这些缺失值 承运人。 以下是数据集的样本:- date carrier Flight tailnum origin dest Distance Air_time Arr_Delay 01-01-2013 UA 1545 N14228 EWR IAH 1400 227 17 01-

我有一个名为Planes的大型数据集,其中到达延迟(Arr\u Delay)中缺少值 用特定路线(起点-终点)上的平均延迟替换这些缺失值 承运人。

以下是数据集的样本:-

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; 
我尝试过的代码:-

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; 

但正如我的问题所述..我想通过特定路线和特定承运人获得缺失值的平均值。请帮帮我标准化过程没有包含by或类变量的方法。您可以使用以下代码完成任务:-

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;

在运行
Proc stdize
之前,您只需按原点、目的地和承运商对表
cs1.Planes
进行排序,然后按原点、目的地和承运商添加
以执行所需的分组。只有当该承运人/路线没有其他值时,这些值才会丢失

您可以找到SAS文档和可用选项

代码:

替换缺失值的技术术语为。可以处理组处理(也称为
BY
)处理的过程将有一个
BY
语句可用于编码。