使用三个条件创建Lag变量

时间:2018-04-09 18:49:46

标签: sas

- 我需要一个基于3个条件的主要变量。如果变量RoaDLM有一个数字,如果Co_ID与滞后(co_id)和IF CEO =滞后(ceo)相同,我需要一个主要变量:Lead1
-i排序以创建滞后变量
- 其他任何事情应该是'。'
- 这是我的代码:

data RoaReg;
set RoaReg;
    by CO_ID descending fyear;
    if RoaDlm ne 0 and Co_ID = lag(CO_ID)  and ceo=ceo then
    Lead1 = lag(ROA); 
    else if RoaDlm= 0 then
    Lead1='.';
run;  

- 无论如何,这不起作用。谢谢!

2 个答案:

答案 0 :(得分:1)

你的代码有几个问题。

  1. 不要在SET和DATA语句中使用相同的数据集名称。这是一个难以调试的错误的配方。
  2. 无法有条件地计算Lag(),总是使用它并在必要时设置为缺失。

    data RoaReg2;
    set RoaReg;
    by CO_ID descending fyear;
    Lead1 = lag(ROA); 
    if  RoaDlm= 0 then call missing (lead1); 
    run;  
    
  3. 这是您的代码的正确版本,或者我最好的猜测。提供样本数据肯定会有所帮助。

答案 1 :(得分:1)

根据我的理解,你需要一个基于几个条件的主导变量 - 两个是变量的滞后值。

据我所知,您在SAS中没有lead功能。您可以使用proc expand来实现此目的。而且,你没有提到你想要领导的变量 - 所以,我假设它是一个名为 ROA 的变量。

所以,这是我对你想要的最佳猜测/解释。

data RoaReg_lead;
merge RoaReg RoaReg(keep=ROA rename=(ROA=LeadROA) firstobs=2); /*merged the same table with only the ROA variable, and read the values from 2nd observation | can't use by variables in order to do so*/
Lag_co_id=lag(co_id); /*creating lagged values*/
Lag_ceo=lag(ceo);

/*conditions*/
if (RoaDLM ne . and RoaDLM>0) and co_id=Lag_co_id and ceo=Lag_ceo then
    Lead1=LeadROA;

drop Lag_co_id Lag_ceo LeadROA; /*You can keep the vars to do a manual check*/
run;

否则,提供您的数据样本表(有和想要)将非常有用。