arrays - SAS 没有循环使用多年
问题描述
我正在使用以下数据集
data have;
input repricingdate1-repricingdate3;
datalines;
'30SEP2019'd '31DEC2020'd '31MAR2022'd
'31DEC2020'd '30JUN2023'd '31DEC2025'd
;
run;
如果这不是输入日期的正确方法,请原谅,我不确定,但我有一个使用 intnx 函数的表格,其中包含这些值
我正在寻找创建一个变量“标志”,如果重新定价日期与标志年份匹配,即第一行的标志(2019)=1,两行的标志(2020)=1,则返回一个“1”,依此类推。
我正在使用下面的代码,看不到我的错误在哪里,它甚至在一个更大的数据集中找到了几行,但是是零星的
data want;
set have;
array flag(2018:2021) flag2018-flag2021;
array repricingdate(1:3);
do i = 2018 to 2021;
do j = 1 to 3;
if put(repricingdate(j), 4.) = compress(vname(flag(i)),, 'kd')
then flag(i)=1;
end;
end;
drop i;
run;
如果有人能指出我的错误,我将不胜感激,谢谢。
解决方案
我不知道您的错误在哪里,但是您可以通过查找年份并将其设置为 1 而不是遍历所有年份来大大简化这一过程。
data want;
set have;
array flag(2018:2021) flag2018-flag2021;
array _date(1:3);
*set all to 0 initially;
do i=lbound(flag) to hbound(flag);
flag(i)=0;
end;
do i = 1 to 3;
year_data=year(_date(i));
flag(year)=1;
end;
drop i;
run;
编辑:您的错误在这里:
put(repricingdate(j), 4.)
-> 这不会产生年份值。如果您想要年份,请改用 YEAR 函数
year(repricingdate(j))
这假设您的日期实际上是 SAS 日期。正如您所提到的,您的演示代码
推荐阅读
- python - 按交叉点合并 2 个分组列表
- google-apps-script - 如何使用 Google Apps 脚本获取列表项的值
- python - 我的 while 循环在 6 次循环后停止,尽管它意味着永远持续下去
- javascript - 如何使用 XMLHttpRequest 命令提示符 echo 命令编写带有“<”的 XML 标记
- kubernetes - 通过 Keycloak 登录 ArgoCD 后出现“无效的 return_url”(错误请求 400)
- javascript - 使用 plugin-google-analytics 在 Docusaurus 网站上禁用 Google Analytics
- python - 编写多处理和多处理的最简单方法
- neo4j - 从大型、单独的节点和边列表创建图形
- windows - Cross Forest Exchange 2019 迁移 - MissingLegacyDNException
- c# - 如何使用带有十进制数的 Assert.Equal()