sas - 无论如何动态更改日期并将它们写入SAS中的表?
问题描述
我正在编写一个动态获取表格并将它们与计算日期相关联以进行进一步计算的代码。我在计算这些日期时遇到了麻烦,因为如果我更改我开始使用的唯一参数,它们的值不会改变。
PS:我选择在 data null步骤中执行它们,以便可以将它们用于其他查询。
%let dtDMRT= 1FEB2016;
/*calculated dates */
DATA _null_;
DAY_DMRT_DEB = intnx('year',"&dtDMRT"d,-1);
format DAY_DMRT_DEB DATE9.;
call symputx('DAY_DMRT_DEB',DAY_DMRT_DEB);
DAY_DMRT_FIN = '&dtDMRT'd;
format DAY_DMRT_FIN DATE9.;
call symputx('DAY_DMRT_FIN',DAY_DMRT_FIN);
DATE_DMRT_1Y = intnx('year',"&dtDMRT"d,1);
format DATE_DMRT_1Y DATE9.;
call symputx('DATE_DMRT_1Y',DATE_DMRT_1Y);
run;
PROC SQL THREADS ;
CREATE TABLE DATAMART_SEG AS
SELECT *,
&DAY_DMRT_DEB as DAY_DMRT_DEB format= DATE9.,
&DAY_DMRT_FIN as DAY_DMRT_FIN format= DATE9.,
&DATE_DMRT_1Y As DATE_DMRT_1Y format= DATE9.
FROM DMRT.MYDATAMART_&dtDMRT
RUN;
%let dtDMRT= 1JAN2016的第一个测试;我在 WORK.DATAMART_SEG 得到了正确的结果:
DAY_DMRT_DEB = '01JAN2015'd
DAY_DMRT_FIN = '01JAN2016'd
DATE_DMRT_1Y = '01JAN2017'd
如何使用%let dtDMRT= 1FEB2016; 我得到:
DAY_DMRT_DEB = '01JAN2015'd
DAY_DMRT_FIN = '01FEB2016'd
DATE_DMRT_1Y = '01JAN2017'd
我知道我可以使用 PROC SQL 或 DATA 步骤直接在表中执行此操作,但我需要这些宏变量用于其他目的
解决方案
根据 intnx 的文档,对齐的默认值设置为 BEGINNING。所以你观察到的是绝对正确的。将 alingment 设置为 SAME 并且 intnx 会做你想做的事。
DATA _null_;
DAY_DMRT_DEB = intnx('year',"&dtDMRT"d,-1,'SAME');
format DAY_DMRT_DEB DATE9.;
call symputx('DAY_DMRT_DEB',DAY_DMRT_DEB);
DAY_DMRT_FIN = "&dtDMRT"d;
format DAY_DMRT_FIN DATE9.;
call symputx('DAY_DMRT_FIN',DAY_DMRT_FIN);
DATE_DMRT_1Y = intnx('year',"&dtDMRT"d,1,'SAME');
format DATE_DMRT_1Y DATE9.;
call symputx('DATE_DMRT_1Y',DATE_DMRT_1Y);
run;
推荐阅读
- c++ - 我应该如何在模板类中存储一些不同的类对象?
- sql-server - 如何防止 SQL 连接出现重复?
- c# - 为什么在某些计算机上安装应用程序时在 2 个日期之间搜索不起作用?
- java - Solr 7.7.2 - FileNotFoundException - ContentStreamBase$FileStream.getStream - 带有重音字符的路径
- android - 将 viewModel 注入@Composable
- android - 值未更新(Jetpack Compose)
- node.js - 无法从 node-pg 导入客户端
- c# - Dotnet 5 Web Api 的 CORS 问题
- flask - Flask-SqlAlchemy:插入使用序列的模型对象
- vlsi - 设计编译器拓扑中的缩放延迟值