Sas 列出每个进程应运行的天数的控制数据集: data CONTROL_FILES_BASE; input Priority : 2. ACTIVE: 1. PROCES_NAME: $10. Nr_week_day: $10. ; cards; 1 1 TEST_01 (1,3,6) 2 1 TEST_02 0 3 1 TEST_03 (4,5) ;

Sas 列出每个进程应运行的天数的控制数据集: data CONTROL_FILES_BASE; input Priority : 2. ACTIVE: 1. PROCES_NAME: $10. Nr_week_day: $10. ; cards; 1 1 TEST_01 (1,3,6) 2 1 TEST_02 0 3 1 TEST_03 (4,5) ;,sas,sas-macro,Sas,Sas Macro,如果要确定今天应该运行哪些进程,只需找出今天是星期几,并相应地选择记录。比如: data General_Stock ; set CONTROL_FILES_BASE ; where findc(Nr_week_day,put(weekday(today()),1.)) ; run ; %macro GENERATE_STOCK (data=/*name of input control dataset*/ ,out= /*name of output dataset*/

如果要确定今天应该运行哪些进程,只需找出今天是星期几,并相应地选择记录。比如:

data General_Stock ;
  set CONTROL_FILES_BASE ;
  where findc(Nr_week_day,put(weekday(today()),1.)) ;
run ;
%macro GENERATE_STOCK
  (data=/*name of input control dataset*/
  ,out= /*name of output dataset*/
  ,ExtractDate=/*extract date is a SAS date or expression like today() */
  );

  data &out ;
    set &data ;
    where findc(Nr_week_day,put(weekday(&extractDate),1.)) ;
  run ;

  title1 "Printout of &out genenerated when ExtractDate=%superq(ExtractDate)" ;
    proc print data=&out ;
    run ;
  title1 ;

%mend GENERATE_STOCK ;
当我写这篇文章时,它是星期六,所以weekday(today())返回7,上面选择0条记录,因为没有计划在星期六运行的进程

如果您想要一个宏,因为您想测试控件数据集在不同日期将触发哪些进程,那么可以编写一个小宏,在其中输入提取日期。比如:

data General_Stock ;
  set CONTROL_FILES_BASE ;
  where findc(Nr_week_day,put(weekday(today()),1.)) ;
run ;
%macro GENERATE_STOCK
  (data=/*name of input control dataset*/
  ,out= /*name of output dataset*/
  ,ExtractDate=/*extract date is a SAS date or expression like today() */
  );

  data &out ;
    set &data ;
    where findc(Nr_week_day,put(weekday(&extractDate),1.)) ;
  run ;

  title1 "Printout of &out genenerated when ExtractDate=%superq(ExtractDate)" ;
    proc print data=&out ;
    run ;
  title1 ;

%mend GENERATE_STOCK ;
测试如下:

%generate_stock(data=control_files_base,out=wantToday    ,extractdate=today())
%generate_stock(data=control_files_base,out=wantSunday   ,extractdate="11Nov2018"d)
%generate_stock(data=control_files_base,out=wantMonday   ,extractdate="12Nov2018"d)
%generate_stock(data=control_files_base,out=wantTuesday  ,extractdate="13Nov2018"d)
%generate_stock(data=control_files_base,out=wantWednesday,extractdate="14Nov2018"d)
%generate_stock(data=control_files_base,out=wantThursday ,extractdate="15Nov2018"d)
%generate_stock(data=control_files_base,out=wantFriday   ,extractdate="16Nov2018"d)
%generate_stock(data=control_files_base,out=wantSaturday ,extractdate="17Nov2018"d)

天哪,这太容易了。。。是的,我知道我的代码太复杂了,但一方面我训练宏,另一方面我只使用SAS Enterprise Guide(SAS企业指南),在其中我将代码设置在另一个进程(由它设置的时间表)之下。我可以在“时间窗口”(一天三次)中独立运行我的报告,这就是为什么我要编写自己的时间表。附加问题:当我尝试按月份的天数检查时,我可以使用这些代码吗?:我将“findc”改为“find”,并在每月的第一天进行测试(在变量I set day-datka中)。效果很好,但你能看看这是否是一个好的解决方案吗<代码>数据控制\u文件\u库;输入优先级:2。现行:1。进程名称:$20。日/月:20美元;卡;1测试01(3,11,12)2测试02 0 3 1测试03(4,5);%设datka='2018年11月1日'd;一般库存数据;设置控制文件库;在哪里找到(第天、第月、第二天、第二天);运行是类似的方法适用于日期。我建议FINDW而不是FIND<代码>查找(“(3,11,12)”,“2”)将返回8,因为它查找字符串“2”
findw(“(3,11,12)”,“2”)
将返回0,因为它找不到单词“2”。非常感谢!您的帮助和解释(对于这两种解决方案)非常宝贵!
%macro GENERATE_STOCK
  (data=/*name of input control dataset*/
  ,out= /*name of output dataset*/
  ,ExtractDate=/*extract date is a SAS date or expression like today() */
  );

  data &out ;
    set &data ;
    where findc(Nr_week_day,put(weekday(&extractDate),1.)) ;
  run ;

  title1 "Printout of &out genenerated when ExtractDate=%superq(ExtractDate)" ;
    proc print data=&out ;
    run ;
  title1 ;

%mend GENERATE_STOCK ;
%generate_stock(data=control_files_base,out=wantToday    ,extractdate=today())
%generate_stock(data=control_files_base,out=wantSunday   ,extractdate="11Nov2018"d)
%generate_stock(data=control_files_base,out=wantMonday   ,extractdate="12Nov2018"d)
%generate_stock(data=control_files_base,out=wantTuesday  ,extractdate="13Nov2018"d)
%generate_stock(data=control_files_base,out=wantWednesday,extractdate="14Nov2018"d)
%generate_stock(data=control_files_base,out=wantThursday ,extractdate="15Nov2018"d)
%generate_stock(data=control_files_base,out=wantFriday   ,extractdate="16Nov2018"d)
%generate_stock(data=control_files_base,out=wantSaturday ,extractdate="17Nov2018"d)