SAS中如何按月份条件选择X或Y变量及代码放置位置
条件选变量的逻辑添加位置
你需要将目标变量的选择逻辑放在SET work.Final_union;语句之后、所有数据输出操作之前。
这个位置的逻辑要求是固定的:必须先通过SET语句从原数据集读入X、Y两个变量的实际值,才能做条件判断;所有变量赋值、字段筛选的操作必须在OUTPUT操作前完成——如果先执行OUTPUT把当前行写到新表,后续再修改变量值,已经写出的内容不会更新,逻辑就完全失效了。
现有代码的问题修正
你目前写的两段IF判断有两个需要调整的地方:
- 两个判断条件刚好覆盖1-12月全月份,不管当前是几月都会触发OUTPUT,根本没有实现行筛选的作用,相当于把原表全量读取后全量输出了
- 现有逻辑仅做了月份判断,完全没有关联X、Y变量的选择逻辑,没有达成你的目标
可直接套用的实现写法
根据你选择变量的不同需求,对应代码可以直接修改使用:
- 需求1:新增一个统一的目标变量,不同月份分别承接X或Y的取值
可以先把重复计算的月份值存为临时变量,减少不必要的函数调用:DATA test ; SET work.Final_union ; * 计算当前所属月份 current_month = MONTH(TODAY()); * 条件匹配目标值 if 1 <= current_month <= 5 then target_value = X; if 6 <= current_month <= 12 then target_value = Y; * 删掉不需要的临时变量 drop current_month; RUN ; - 需求2:根据月份直接决定输出数据集保留哪个字段(1-5月只保留X、6-12月只保留Y)
可以结合DROP字段筛选逻辑实现:DATA test ; SET work.Final_union ; current_month = MONTH(TODAY()); if 1 <= current_month <= 5 then drop Y; if 6 <= current_month <= 12 then drop X; drop current_month; RUN ;
内容的提问来源于stack exchange,提问作者Eyal Marom
相关产品推荐
相关产品推荐

