LAG功能的更多问题是SAS

时间:2012-04-13 15:27:03

标签: algorithm sas lag

以下位SAS代码应该从包含名为“Radvalue”的数值变量的数据集中读取。 Radvalue是散热器的温度,如果散热器关闭但是它的温度增加2或更多,则表明它已经亮起,如果它已经开启,但它的温度降低了2或更多,这是一个迹象,它已经消失了。 Radstate是数据集中的一个新变量,它指示每个观察散热器是打开还是关闭,这就是我正在尝试自动填充整个数据集。  所以我试图使用LAG函数,尝试初始化没有dif_radvalue的第一行,然后尝试将我刚才描述的算法应用于第2行。 知道为什么列Radstate和l_radstate完全空白了吗?

非常感谢everso !!如果我没有清楚地解释这个问题,请告诉我。

Data work.heating_algorithm_b;
 Input ID Radvalue; 
 Datalines; 
  1 15.38 
  2 15.38 
  3 20.79 
  4 33.47 
  5 37.03 
  6 40.45 
  7 40.45 
  8 40.96 
  9 39.44 
  10 31.41 
  11 26.49 
  12 23.06 
  13 21.75 
  14 20.16 
  15 19.23 
 ; 

DATA temp.heating_algorithm_c;
 SET temp.heating_algorithm_b;

 DIF_Radvalue = Radvalue - lag(Radvalue);

 l_Radstate = lag(Radstate);

 if missing(dif_radvalue) then  
  do;
   dif_radvalue = 0;
   radstate = "off"; 
  end;                            
 else if l_Radstate = "off"  &  DIF_Radvalue > 2    then Radstate = "on";
 else if l_Radstate = "on" &  DIF_Radvalue < -2  then  Radstate = "off";
 else  Radstate = l_Radstate;
run;

2 个答案:

答案 0 :(得分:0)

我没有SAS经验,但也许你需要missing(l_Radstate)检查才能完成第一次检查,可能是这样的:

if missing(l_Radstate) then
do; radstate = "off"; end; 

我认为只有在Radvalue - lag(Radvalue)没有强制DIF_Radvalue失踪的情况下才需要这样做。如果确实如此,我不确定会有什么帮助...

答案 1 :(得分:0)

您试图对仅存在于输出数据集(RADSTATE)中的变量执行LAG函数。我用RADAIN替换了RADSTATE上的LAG。此外,您将LAG功能保持在任何条件逻辑之外是正确的...请尝试以下代码。

Data work.heating_algorithm_b;
 Input ID Radvalue; 
 Datalines; 
  1 15.38 
  2 15.38 
  3 20.79 
  4 33.47 
  5 37.03 
  6 40.45 
  7 40.45 
  8 40.96 
  9 39.44 
  10 31.41 
  11 26.49 
  12 23.06 
  13 21.75 
  14 20.16 
  15 19.23 
 ; 

DATA work.heating_algorithm_c;
 length radstate $3;
 retain radstate;
 SET work.heating_algorithm_b;

 old_radvalue=lag(radvalue);

 if _n_=1 then do;
  dif_radvalue=0;
  radstate="off";
 end;
 else do;
  DIF_Radvalue = Radvalue-Old_Radvalue;

  if Radstate = "off"  &  DIF_Radvalue > 2    then Radstate = "on";
  else if Radstate = "on" &  DIF_Radvalue < -2  then  Radstate = "off";
  /* Else Radstate stays the same */
 end;
run;