date - 当我在 SAS 中计算新变量时,为什么我的值会发生偏移?
问题描述
我正在尝试使用 SAS 中的 YEAR() 函数从 MMDDYY10 格式的日期中提取年份。但是,当我计算名为“年”的新列时,所有值都会偏移一行。
例如,我想要:
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;
解决方案
语句的顺序很重要。您的程序正在计算年份,然后从数据集中读取 DATEBP 的值。由于 YEAR 不在源数据集中,因此 SET 语句不会更改 year 的值。
这就是为什么第一个观察值缺少 YEAR 值,尚未读取 DATEBP 的值。YEAR 的其余值没有丢失的原因是因为 SAS 在开始数据步骤的下一次迭代之前不会将来自输入数据集的变量重置为丢失。因此,对于第 2 次、第 3 次等迭代,您将根据在前一次迭代中读取的 DATEBP 值计算 YEAR。然后用 SET 语句读取的当前观察值替换 DATEBP 的值。
推荐阅读
- hybris - 如何创建本地化字符串集合
- c++ - 链接c ++动态库不断失败
- css - CSS 和 JS 文件不会在服务器上加载 | 拉拉维尔
- visual-studio-code - 如何在 vscode 的 tmLanguage.Json 中定义自定义颜色?
- bash - 在 unix 中运行带有特殊字符的 shell 脚本
- c++ - 为什么我的子类不继承我父母的字符串?
- java - 在此方法中找不到对返回的引用
- sql-server - 在不使用 IN 子句的情况下使用 T-SQL 有效删除记录
- javascript - 如何从已经创建实例的类中调用静态异步函数?
- pandas - Pandas - 更改数据框的对齐方式