linux文件名最大长度宏,SAS宏变量问题 - '文件名值超过最大长度'

你实际上并没有以正确的方式传递信息 - 你混合了两个不同的东西,这导致了你的问题。

您可以在宏变量中解析这些函数的结果,或者您可以存储函数调用并将其视为您将函数键入数据步骤 - 因此请使用CATS或其他东西来组合它们。 / p>

实际上,你最终会得到像"\\path\to\COMPRESS(INTNX(MONTH..."这样的文件名,而不是这些函数的结果,因此就是你的问题。

所以,一个选择:

DATAFILE= cats("...Files_Submitted\",&yrmm.,"\Reconcile\",&quarter.,"Principal balances.xls";

这会让函数按预期提供它们的值。

另一个选项是使用%SYSFUNC来询问要在宏变量中解析的值。这是更常见的方式,但当然,对于所有目的来说,两者都没有特别好。

%LET EOLM= %sysfunc(INTNX(MONTH,%sysfunc(today()),-&MonthsAgo.));

与其他两个相似。请注意,我删除MONTH周围的引号,因为%SYSFUNC调用中没有使用引号(除非您想使用引号字符本身,而不是字符串分隔符)。

%LET yrmm= %sysfunc(year(&EOLM.))%sysfunc(month(&EOLM.),z2.);

请注意,我将格式直接放在SYSFUNC调用中;另请注意,我们不在宏变量中使用连接字符(它们只生成文本),通常您不需要使用COMPRESS(尽管并非总是如此)。

%LET qtr = %sysfunc(year(&EOLM.))Q%sysfunc(CEIL(%sysevalf(%sysfunc(month(&EOLM.))/3)));

这里我们使用%SYSEVALF进行数学运算(通常你不能在宏语法中使用非整数数学)。我们也会从Q中删除引号,然后将其排成一行。

全部放在一起:

%let monthsAgo = 3;

%LET EOLM= %sysfunc(INTNX(MONTH,%sysfunc(today()),-&MonthsAgo.));

%put &=EOLM;

EOLM=20789

%LET yrmm= %sysfunc(year(&EOLM.))%sysfunc(month(&EOLM.),z2.);

%put &=yrmm;

YRMM=201612

%LET qtr = %sysfunc(year(&EOLM.))Q%sysfunc(CEIL(%sysevalf(%sysfunc(month(&EOLM.))/3)));

%put &=qtr;

QTR=2016Q4

当然,使用yrmm / qtr的格式更容易......

%let yrmm = %sysfunc(putn(&eolm.,yymmn6.));

%let qtr = %sysfunc(putn(&eolm.,yyq6.));

%put &=yrmm &=qtr;

或者甚至(这可能会有点可爱)从%SYSFUNC中移除&EOLM并让%SYSFUNC格式选项处理格式化。请注意,此处EOLM不存储数字,但会存储您在屏幕上看到的文字,并且在定义YRMM或QTR之前,该数字无法解析。

%LET EOLM= INTNX(MONTH,%sysfunc(today()),-&MonthsAgo.);

%let yrmm = %sysfunc(&eolm.,yymmn6.);

%let qtr = %sysfunc(&eolm.,yyq6.);

%put &=yrmm &=qtr;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值