在SAS中如何定义当前年份?设置2018为当前年份计算年龄
在SAS中设置固定年份(2018)计算年龄的解决方法
嘿,我明白你遇到的问题了——直接写current_year=2018;SAS不买账,是因为SAS的变量赋值必须放在**数据步(DATA Step)**或者合适的程序块里,单独的赋值语句SAS会识别为无效代码。下面给你几种靠谱的解决方式:
方法1:在数据步内直接定义年份变量
这是最直接的方式,把年份赋值和年龄计算都放在DATA步里:
/* 假设你的原始数据集叫original_data,要生成的新数据集叫calculated_data */ DATA calculated_data; SET original_data; /* 在这里定义current_year为2018 */ current_year = 2018; /* 计算年龄 */ Age = current_year - birth_year; RUN;
只要birth_year是数值型的年份(比如1995这种数字),这个计算就会正常工作。如果你的birth_year其实是SAS日期格式的变量(比如存储的是'15MAR1995'D这种),那得先用YEAR()函数提取年份:
DATA calculated_data; SET original_data; current_year = 2018; /* 从日期变量中提取出生年份 */ birth_year_num = YEAR(birth_date); Age = current_year - birth_year_num; RUN;
方法2:用宏变量全局复用年份值
如果需要在多个数据步、过程步里都用到2018这个年份,用宏变量会更方便,后续改年份也只需要改一处:
/* 定义全局宏变量current_year,值为2018 */ %LET current_year = 2018; /* 在数据步中引用宏变量(用&符号) */ DATA calculated_data; SET original_data; Age = ¤t_year - birth_year; RUN;
这样不管后面多少个程序块需要用到这个年份,直接用¤t_year就行,不用重复赋值。
补充说明
你之前的错误本质是SAS的执行逻辑:它是按"步"执行的,单独的赋值语句不属于任何DATA或PROC步,所以SAS无法识别。只要把变量赋值放在DATA步内部,问题就解决啦。
内容的提问来源于stack exchange,提问作者Luxemburg Manhattan
相关产品推荐
相关产品推荐

