Date 在SAS中计算新变量时,为什么我的值会偏移?
我试图使用SAS中的YEAR()函数从格式为MMDDYY10的日期中提取年份。但是,当我计算名为“year”的新列时,所有的值都偏移了一行 例如,我想要:Date 在SAS中计算新变量时,为什么我的值会偏移?,date,sas,Date,Sas,我试图使用SAS中的YEAR()函数从格式为MMDDYY10的日期中提取年份。但是,当我计算名为“year”的新列时,所有的值都偏移了一行 例如,我想要: Date Year 12/31/2014 2014 06/25/2007 2007 但我得到了: Date Year 12/31/2014 . 06/25/2007 2014 . 2007
Date Year
12/31/2014 2014
06/25/2007 2007
但我得到了:
Date Year
12/31/2014 .
06/25/2007 2014
. 2007
Data Clinic2;
format datebp MMDDYY10.;
year = YEAR(datebp);
set Clinic;
run;
将其更改为下面的代码。您的set语句已从数据中排到第一位,必须读取数据才能进行计算。如果将变量保留在set语句之前,则新变量初始化将以缺少的值开始,然后读取set语句
Data Clinic2;
set Clinic;
year = YEAR(datebp);
run;
让我们尝试使用sashelp.class来理解。
变量初始化甚至在将数据读取为缺失值之前就已开始
/* wrong way*/
data want;
age1 = age+5;
set sashelp.class;
run;
/* correct way*/
data want;
set sashelp.class;
age1 = age+5;
run;
即使在读取数据之后,变量初始化也已开始,并且未分配给缺少的值
/* wrong way*/
data want;
age1 = age+5;
set sashelp.class;
run;
/* correct way*/
data want;
set sashelp.class;
age1 = age+5;
run;
语句的顺序很重要。您的程序正在计算年份,然后从数据集中读取DATEBP的值。由于YEAR不在源数据集中,因此SET语句不会更改YEAR的值 这就是为什么第一个观测值缺少年份值,但尚未读取DATEBP值的原因。年份的其余值没有丢失的原因是,SAS在开始数据步骤的下一次迭代之前,不会将来自输入数据集的变量重置为丢失。因此,对于第二次、第三次等迭代,您将根据上一次迭代读取的DATEBP值计算年份。然后用SET语句读取的当前观测值替换DATEBP的值