gpt4 book ai didi

sas - 使用 SAS 中的面板数据建立治疗样本

转载 作者:行者123 更新时间:2023-12-02 09:30:12 24 4
gpt4 key购买 nike

我的面板数据看起来像这样:

ID      year    dummy
1234 2007 0
1234 2008 0
1234 2009 0
1234 2010 1
1234 2011 1
2345 2008 0
2345 2009 1
2345 2010 1
2345 2011 1
3456 2008 0
3456 2009 0
3456 2010 1
3456 2011 1

更多的观察遵循相同的模式,还有更多与此问题无关的变量。

我想建立一个ID的处理样本,其中虚拟变量在2010年“切换”(当年份<2010时为0,当年份>=2010时为1)。在上面的示例数据中,1234 和 3456 将在样本中,而 2345 则不会。

我对 SAS 相当陌生,我想我对 CLASS 和 BY 语句还不够熟悉,无法弄清楚如何做到这一点。

到目前为止我已经这样做了:

data c_temp;
set c_data_full;
if year < 2010 and dummy=0
then trtmt_grp=1;
else pre_grp=0;
if year >=2010 and dummy=1
then trtmt_grp=1;
run;

但这对数据的面板方面没有任何作用。我不知道如何执行最后一步,仅选择每年 trtmt_grp 为 1 的 ID。

感谢所有帮助!谢谢!

最佳答案

不要认为您需要双 DoW 循环,除非您需要将数据附加到其他行。如果您只需要每个匹配的 ID 一行,那么简单的单遍就足够了。

data want;
set have;
by id;
retain grpcheck; *keep its value for multiple passes;
if first.id and year < 2010 then grpcheck=1; *reset for each ID to 1 (kept);
else if first.id and year ge 2010 then grpcheck=0;
if (year<2010) and (dummy=1) then grpcheck=0; *if a non-zero is found before 2010, set to 0;
if (year >= 2010) and (dummy=0) then grpcheck=0; *if a 0 is found at/after 2010, set to 0;
if last.id and year >= 2010 and grpcheck=1; *if still 1 by last.id and it hits at least 2010 then output;
run;

任何时候你想对每个ID(或者,按某个变量的值逻辑分组的每个行集)执行一些逻辑,你都可以从设置标志/等开始。在 if first.id 语句组中。然后,根据每行的情况修改标志。然后,添加一个 if last.id 组,该组检查当您点击最后一行时该标志是否仍然设置。

关于sas - 使用 SAS 中的面板数据建立治疗样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34003204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com