String 全局SAS变量定义内的日期到字符串转换
我的目标是在一个全局SAS变量中连接一个长目录字符串,而不使用额外的数据步骤。我有以下代码:String 全局SAS变量定义内的日期到字符串转换,string,date,sas,String,Date,Sas,我的目标是在一个全局SAS变量中连接一个长目录字符串,而不使用额外的数据步骤。我有以下代码: %let deadline='31Dec2019'd; %let rootDir=Y:\PD; %let timestamp=input(&deadline.,yymmdd8.); %let PATH=&rootDir\currentStats\×tamp.; %put &PATH.--; 这给了我一个让我困惑的错误: 检测到开放代码语句递归 我还尝试了%in
%let deadline='31Dec2019'd;
%let rootDir=Y:\PD;
%let timestamp=input(&deadline.,yymmdd8.);
%let PATH=&rootDir\currentStats\×tamp.;
%put &PATH.--;
这给了我一个让我困惑的错误:
检测到开放代码语句递归
我还尝试了%input
、%put
和put
而不是input
,但总是出现相同的错误。我对SAS还不是很流利,所以请原谅我这个不切实际的问题,但我在网络上找不到任何有效的解决方案,而且似乎在这里也还没有找到
无法解决我的问题的资源:
- 将日期文字源代码段作为日期值进行评估
- 使用格式
将日期值呈现为yyyymmddB8601DA8.
%sysfunc
宏函数使用基本函数
语法是
%let result = %sysfunc ( <function-name> ( <arg-1>, ... ) );
文件名的实际部分可能有不同的日期表示形式。以下是一些可能性:
/* date representation construct according to ----> format */
%put yymmdd : %sysfunc(putn(&deadline, yymmdd6.));
%put yy-mm-dd : %sysfunc(putn(&deadline, yymmdd8.));
%put yyyymmdd : %sysfunc(putn(&deadline, B8601DA8.));
%put yyyymmdd : %sysfunc(putn(&deadline, YYMMDDN8.));
----- log -----
yymmdd : 191231
yy-mm-dd : 19-12-31
yyyymmdd : 20191231
yyyymmdd : 20191231
谢谢你快速而结论性的回答。只有一个后续问题:我必须在代码中更改什么才能将日期设置为
yyyymmdd
?在%sysfunc()
调用中不需要嵌套的%sysevalf()
函数调用。
/* date representation construct according to ----> format */
%put yymmdd : %sysfunc(putn(&deadline, yymmdd6.));
%put yy-mm-dd : %sysfunc(putn(&deadline, yymmdd8.));
%put yyyymmdd : %sysfunc(putn(&deadline, B8601DA8.));
%put yyyymmdd : %sysfunc(putn(&deadline, YYMMDDN8.));
----- log -----
yymmdd : 191231
yy-mm-dd : 19-12-31
yyyymmdd : 20191231
yyyymmdd : 20191231