如何为SAS数据集按规则生成Flag变量(基于path首次出现)
SAS数据集分组标记首次出现行
需求说明
现有已按year、week、path、Value降序排序的SAS数据集DB,需要生成新数据集DB1:为每个(year, week, path)组合的首次出现行设置Flag=1,同一组合内的其余行设置Flag=0。
实现方法
利用SAS DATA步的BY组自动变量即可快速实现,无需复杂逻辑:
代码示例
直接处理已排序数据
data DB1; set DB; /* 指定分组维度:year、week、path */ by year week path; /* first.path在每组第一行为1,其余为0,直接赋值给Flag */ Flag = first.path; run;
含排序步骤(若数据未预先排序)
如果原始数据未按要求排序,先执行排序再处理:
/* 按需求规则排序 */ proc sort data=DB; by year week path descending Value; run; /* 生成Flag标记 */ data DB1; set DB; by year week path; Flag = first.path; run;
原理说明
使用by year week path后,SAS会自动生成两个临时变量:
first.path:当前行是(year, week, path)组合的第一行时取值为1,其余行取值为0last.path:当前行是组合的最后一行时取值为1,其余行取值为0
直接将first.path赋值给Flag,完全匹配需求中的标记规则。
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

