我有一个这样的宏:
%macro loop(report_date);
/* some sql-code with where-statement on report_date:
create table with name small_table */
%mend;
然后,我想编写一个创建表的代码:该表是表的联合,其中变量report_day的条件为true。 但是我的代码不起作用:
%let days_number = 31;
%let Min_Date = '01Jan2018:00:00:00'dt;
/* create table with name big_table */
/*this macro creates a union table */
%macro doInLoop(report_date);
%loop(&report_date.);
PROC SQL;
CREATE TABLE Big_table AS
SELECT *
FROM big_table
UNION ALL
SELECT *
FROM small_table;
QUIT;
%mend;
%macro createTable;
%local j;
%do j = 1 to &days_number.;
%let rep_date = dhms(datepart(&Min_Date.) + j, 0, 0, 0);
%if day(rep_date) = 1 %then %doInLoop(%rep_date);
%end;
%mend;
%createTable;
我有31条错误消息: “错误:在贡献表中未找到以下列:j”
或者如何创建一个宏,该宏在范围内的某些天中使用一天(“循环”)的工作宏?
谢谢。
答案 0 :(得分:0)
很遗憾,您的问题还不只是您的约会,所以我会 向您展示如何循环播放,其余内容留给您。
set PATH="C:\Program Files\Java\jdk-10.0.1\bin";%PATH%
set CLASSPATH=.;C:\apache-tomcat-7.0.34\lib\servlet-api.jar;C:\apache-tomcat-7.0.34\lib\jsp-api.jar;C:\apache-tomcat-7.0.34\lib\el-api.jar;C:\apache-tomcat-7.0.34\lib\commons-beanutils-1.8.3.jar;C:\apache-tomcat-7.0.34\mongo-java-driver-3.1.0.jar;C:\apache-tomcat-7.0.34\lib\gson-2.3.1.jar
set ANT_HOME=C:\apache-tomcat-7.0.34
set TOMCAT_HOME=C:\apache-tomcat-7.0.34
set CATALINA_HOME=C:\apache-tomcat-7.0.34
DTDAY指定日期时间变量的日期间隔。如果您有日期变量,则间隔为DAY。
请记住以&符号引用rep_date,&rep_date,否则只是发给SAS的文本。
您可能会在宏附录中找到示例宏。一个说明了带日期的循环。 https://documentation.sas.com/?docsetId=mcrolref&docsetTarget=n01vuhy8h909xgn16p0x6rddpoj9.htm&docsetVersion=9.4&locale=en