SAS软件:如何删除因变量超过五个零的观测值
我有一个消费者面板数据,记录了零售店每周的消费情况。唯一标识符是住户ID。如果支出中出现五个以上的零,我想删除观察值。也就是说,这户人家有五个星期没有购买任何东西。一旦确定,我将删除与住户ID相关的所有观察结果。有人知道我如何在SAS中实施此程序吗?谢谢。我认为proc-SQL在这里会很好 这可以通过一个更复杂的子查询在一个步骤中完成,但最好将其分解为两个步骤SAS软件:如何删除因变量超过五个零的观测值,sas,filtering,data-cleaning,Sas,Filtering,Data Cleaning,我有一个消费者面板数据,记录了零售店每周的消费情况。唯一标识符是住户ID。如果支出中出现五个以上的零,我想删除观察值。也就是说,这户人家有五个星期没有购买任何东西。一旦确定,我将删除与住户ID相关的所有观察结果。有人知道我如何在SAS中实施此程序吗?谢谢。我认为proc-SQL在这里会很好 这可以通过一个更复杂的子查询在一个步骤中完成,但最好将其分解为两个步骤 计算每个家庭ID有多少个零 筛选以仅包括具有5个或更少零的家庭ID proc-sql 创建表0\u cnt作为 选择不同的住户id, 总
proc-sql
创建表0\u cnt作为
选择不同的住户id,
总和(支出=0,则为1,否则为0结束)为num_零
从原始数据
按住户id分组代码>
create table wanted as
select *
from original_data
where household_id in (select distinct household_id from zero_cnt where num_zeroes <= 5);
quit;
使用滞后运算符:检查以前的支出金额
有关滞后的更多信息,请点击此处:
然后只需使用子查询或匹配合并来删除“排除”数据集中的ID
proc sql;
create table wanted as
select *
from original_data;
where household_id not in(select distinct household_id from excluded);
quit;
发布您尝试过的内容和示例数据。这个过程将是计算连续0周的数量,确定超过5周的所有id,然后删除这些id。可以是数据步骤、SQL解决方案或组合。发布示例数据和您尝试过的内容,有人可以在我的一般建议之外提供帮助。一般问题->一般回答谢谢。对于以下情况,您将如何修改代码。结果变量的零计数是可以的,只要我们没有连续的五个零。再次感谢。
data exclude;
set sorted;
by household_id;
array prev{*} _L1-_L4;
_L1 = lag(spending);
_L2 = lag2(spending);
_L3 = lag3(spending);
_L4 = lag4(spending);
* Create running count for the number of observations for each ID;
if first.household_id; then spend_cnt = 0;
spend_cnt + 1;
* Check if current ID has at least 5 observations to check. If so, add up current spending and previous 4 and output if they are all zero/missing;
if spend_cnt >= 5 then do;
if spending + sum(of prev) = 0 then output;
end;
keep household_id;
run;
proc sql;
create table wanted as
select *
from original_data;
where household_id not in(select distinct household_id from excluded);
quit;