BASE SAS:根据其他行中的值分配值

时间:2014-04-19 22:57:59

标签: sas

我尝试根据其他行中的值分配值。语法有问题 - 不知道从哪里开始。下面是两个数据集,一个是我开始的,另一个是我想要完成的。

这是我的标准/逻辑:

我必须为Adddnames分配正确的Placement_tactic。

如果缺少Placement_tactic且AddType为= Default

  1. 然后需要查看Placement_Type
  2. 在其他行中查找Placement_Type
  3. 如果填充了Placement_Tactic
  4. 然后将placement_tactic设置为与Placement_Type
  5. 相同

    这是我的开始,请注意Placement_tactic中缺少的值:

    data have;
      infile cards missover;
      input AddNAme $16. AddType $9.  Placement_Type $34. Placement_tactic $16. ;
    cards; 
    160x600DefaultAd Default  AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     
    160x600DefaultAd Default  AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     
    160x600DefaultAd Default  AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     
    160x600DefaultAd Default  AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY 
    160x600DefaultAd Default  AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY 
    160x600DefaultAd Default  AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY 
    300x600DefaultAd Default  AOD_1H_BAU_ACQ_MLP_CPM    
    300x600DefaultAd Default  AOD_1H_BAU_ACQ_MLP_CPM    
    300x600DefaultAd Default  AOD_1H_BAU_ACQ_MLP_CPM    
    300x600DefaultAd Default  ROCKET_FUEL_1H    
    300x600DefaultAd Default  ROCKET_FUEL_1H    
    300x600DefaultAd Default  ROCKET_FUEL_1H    
    RedAdd100        standard AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition
    RedAdd100        standard AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition
    BlueAdd100       standard AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie
    BlueAdd100       standard AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie
    SaleAd           standard AOD_1H_BAU_ACQ_MLP_CPM            Remarketing
    SaleAd           standard AOD_1H_BAU_ACQ_MLP_CPM            Remarketing
    SaleAd           standard ROCKET_FUEL_1H                    PreRoll
    SaleAd           standard ROCKET_FUEL_1H                    PreRoll
    ;
    

    这就是我想要完成的事情:

    data WANT;
      infile cards missover;
      input AddNAme $16. AddType $9.  Placement_Type $34. Placement_tactic $16. ;
    cards; 
    160x600DefaultAd Default  AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition     
    160x600DefaultAd Default  AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition     
    160x600DefaultAd Default  AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition 
    160x600DefaultAd Default  AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie  
    160x600DefaultAd Default  AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie  
    160x600DefaultAd Default  AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie  
    300x600DefaultAd Default  AOD_1H_BAU_ACQ_MLP_CPM            Remarketing     
    300x600DefaultAd Default  AOD_1H_BAU_ACQ_MLP_CPM            Remarketing
    300x600DefaultAd Default  AOD_1H_BAU_ACQ_MLP_CPM            Remarketing
    300x600DefaultAd Default  ROCKET_FUEL_1H                    PreRoll 
    300x600DefaultAd Default  ROCKET_FUEL_1H                    PreRoll 
    300x600DefaultAd Default  ROCKET_FUEL_1H                    PreRoll 
    RedAdd100        standard AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition
    RedAdd100        standard AOD_1H_BAU_ACQ_DMP_COM_RT_CPM     Acquisition
    BlueAdd100       standard AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie
    BlueAdd100       standard AD.COM_1H_BAU_ACQ_C2C_BAU_DISPLAY Moblie
    SaleAd           standard AOD_1H_BAU_ACQ_MLP_CPM            Remarketing
    SaleAd           standard AOD_1H_BAU_ACQ_MLP_CPM            Remarketing
    SaleAd           standard ROCKET_FUEL_1H                    PreRoll
    SaleAd           standard ROCKET_FUEL_1H                    PreRoll
    ;
    

1 个答案:

答案 0 :(得分:1)

您的数据的“完整故事”不明确 - 如果Placement_tactic可能同时丢失,AddType ^= Default可能同时丢失,如果可能没有填充Placement_tactic对于某个Placement_type,如果可能有其他AddTypes缺少Placement_tactic等等。

到目前为止,您似乎只想将某个Placement_tactic的已填充Placement_type值展开到非填充行。可以通过排序然后在DATA-step中保留第一个值来轻松实现:

proc sort data=have ; by Placement_Type descending Placement_Tactic; run;
data want;
     set have;
     retain _tactic;
     by Placement_Type;
     if FIRST.Placement_Type then _tactic=Placement_Tactic;
     else Placement_Tactic=_tactic;
     drop _:;
run;

适用于提供的样本数据。