gpt4 book ai didi

sas - 如何计算 SAS 中宏变量的数据类型

转载 作者:行者123 更新时间:2023-12-04 14:32:53 26 4
gpt4 key购买 nike

如何在日志中打印出宏变量的数据类型

%macro mymacro(dt2);


%LET c_mth = %SYSFUNC(intnx(month,&dt2.d,-1,e),date9.) ;
%put &c_mth;

%mend;

mymacro('01sep2014')

我使用 %let 或 into 分配了一堆宏变量:
我的问题是我试图在日期上做一堆 bool 条件,但我怀疑我的一些变量是字符串,有些是日期
我已经在我的代码中转换了它们,但是要三重检查肯定有一种方法可以将某些内容返回到日志中

我想要类似于在 R 中使用 str() 或 mode() 或 is.numeric() 的东西

最佳答案

H,

SAS 宏语言很奇怪。 :)

正如 Reeza 所说,宏变量没有类型,它们都是文本。

但是,如果您使用 bool 逻辑(%IF 语句),并且两个操作数都是整数,则宏语言将进行数字比较而不是字符比较。

因此,您可以使用 INPUTN() 函数将日期字符串转换为 SAS 日期(自 01Jan1960 以来的天数),然后进行比较。这是一个示例,从您的代码中跳出:

%macro mymacro(dt1,dt2);
%local c_mth1 c_mth2 n_mth1 n_mth2;

%let c_mth1 = %sysfunc(intnx(month,&dt1.d,-1,e),date9.) ;
%let c_mth2 = %sysfunc(intnx(month,&dt2.d,-1,e),date9.) ;
%let n_mth1 = %sysfunc(inputn(&c_mth1,date9.)) ;
%let n_mth2 = %sysfunc(inputn(&c_mth2,date9.)) ;

%put &c_mth1 -- &n_mth1;
%put &c_mth2 -- &n_mth2;

%if &n_mth1<&n_mth2 %then %put &c_mth1 is before &c_mth2;
%else %put &c_mth1 is NOT before &c_mth2;

%mend;

从示例调用记录:
236  %mymacro('01feb1960','01mar1960')
31JAN1960 -- 30
29FEB1960 -- 59
31JAN1960 is before 29FEB1960

——问。

关于sas - 如何计算 SAS 中宏变量的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28467405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com