SAS中非平衡数据集的滚动窗口模型

SAS中非平衡数据集的滚动窗口模型,sas,Sas,我有一个不平衡的面板数据集,其形式如下(简化): 现在,我想估算每个ID的以下模型: proc reg; by ID; EARN = LAG_EARN; run; 但是,我想对一些大小的滚动窗口执行此操作。例如,对于大小为2的窗口。窗口应仅包含非空的观察值。例如,在公司A的情况下,窗口从1961年起适用,因此只适用一次(因为1961年之后只有一年,窗口的大小应为2) 最后,我想得到一个包含年份列和固定行的表。该表应表明以下内容:对公司A进行了一次回归模型(窗口大小为2)。可用年

我有一个不平衡的面板数据集,其形式如下(简化):

现在,我想估算每个ID的以下模型:

proc reg;
    by ID;
    EARN = LAG_EARN;
run;
但是,我想对一些大小的滚动窗口执行此操作。例如,对于大小为2的窗口。窗口应仅包含非空的观察值。例如,在公司A的情况下,窗口从1961年起适用,因此只适用一次(因为1961年之后只有一年,窗口的大小应为2)

最后,我想得到一个包含年份列和固定行的表。该表应表明以下内容:对公司A进行了一次回归模型(窗口大小为2)。可用年数仅允许对该模型进行一次估计。换言之,1962年,回归模型的系数根据2年前的窗口值为X。将同样的逻辑应用于其他两家公司,可以得到下表。“X”表示公司A/B/C基于2年窗口在某一年的各自估计系数值,“n”表示不存在此类数值:

data want;
input ID 1962 1974 1980 1981 1982 1983 1984;
datalines;
1 X n n n n n n
2 n n X X X X X      
3 n X n n n n n 
;
run;​ 

我不知道如何执行这个。此外,我想创建一个宏,它允许我在创建类似输出数据帧的同时估计不同的滚动窗口模型。我非常感谢您的帮助,因为我已经挣扎了很长时间。

试试这个宏。仅当您指定的滞后值不缺失时,才会输出此选项

%macro lag(data=, out=, window=);

    data _want_;
        set &data.;
        by ID;

        LAG_EARN = lag&window.(earn);

        if(first.ID) then call missing(lag_earn);

        if(NOT missing(lag_earn));
    run;

    proc sort data=_want_;
        by year id;
    run;

    proc transpose data=_want_
                   out=&out.(drop=_NAME_);
        by ID notsorted;
        id year;
        var lag_earn;
    run;

    proc sort data=&out.;
        by id;
    run;
%mend;
%lag(data=have, out=want, window=1);

谢谢你的回复。但是我该如何将回归模型集成到这个过程中呢?只需在转置步骤之前添加一个proc reg。你在做什么型号的?
%macro lag(data=, out=, window=);

    data _want_;
        set &data.;
        by ID;

        LAG_EARN = lag&window.(earn);

        if(first.ID) then call missing(lag_earn);

        if(NOT missing(lag_earn));
    run;

    proc sort data=_want_;
        by year id;
    run;

    proc transpose data=_want_
                   out=&out.(drop=_NAME_);
        by ID notsorted;
        id year;
        var lag_earn;
    run;

    proc sort data=&out.;
        by id;
    run;
%mend;
%lag(data=have, out=want, window=1);