sas - How to compare date values in a macro? -
here macro i'm running....
%macro controlloop(ds); %global dset nvars nobs; %let dset=&ds; /* open info set passed macro parameter */ %let dsid = %sysfunc(open(&dset)); /* if info set exists, check number of obs ,,,then close info set */ %if &dsid %then %do; %if %sysfunc(attrn(&dsid,nobs))>0 %then %do;; %local dsid cols rctotal ; %let dsid = %sysfunc(open(&ds)); %let cols=%sysfunc(attrn(&dsid, nvars)); %do %while (%sysfunc(fetch(&dsid)) = 0); /* outer loop across rows*/ /*0:success,>0:nosuccess,<0:rowlocked,-1:eof reach*/ %if fmt_start_dt<=&sysdate9 , fmt_end_dt>=sysdate9 %then %do; %do = 1 %to &cols; %local v t; /*to var names , types using varname , vartype functions in next step*/ %let v=%sysfunc(varname(&dsid,&i)); /*gets var names*/ %let t = %sysfunc(vartype(&dsid, &i)); /*gets variable type*/ %let &v = %sysfunc(getvar&t(&dsid, &i));/*to var values using getvarc or getvarn functions based on var info type*/ %end; %createformat(dsn=&dsn, label=&label, start=&start, fmtname=&fmtname, type=&type); %end; %else %put ###*****format expired*****; %end; %end; %else %put ###*****data set &dset has 0 rows in it.*****; %let rc = %sysfunc(close(&dsid)); %end; %else %put ###*****open info set &dset failed - %sysfunc(sysmsg()).*****; %mend controlloop; %controlloop(format_control);
format_control data:
dsn :$12. label :$15. start :$15. fmtname :$8. type :$3. fmt_start_dt :mmddyy. fmt_end_dt :mmddyy.; ssin.prd prd_nm prd_id mealnm 'n' 01/01/2013 12/31/9999 ssin.prd prd_id prd_nm mealid 'c' 01/01/2013 12/31/9999 ssin.fac fac_nm onesrc_fac_id fac1srnm 'n' 01/01/2013 12/31/9999 ssin.fac fac_nm d3_fac_id facd3nm 'n' 01/01/2013 12/31/9999 ssin.fac onesrc_fac_id d3_fac_id facd31sr 'n' 01/01/2013 02/01/2012 oper.wrkgrp wrkgrp_nm wrkgrp_id grpnm 'n' 01/01/2013 12/31/9999
how can compare fmt_start_dt , fmt_end_dt sysdate ? tried %if fmt_start_dt<=&sysdate9 , fmt_end_dt>=sysdate9 %then %do;
in code values not picking in loop....any idea??? in advance....
i'm not exclusively sure want, think might work:
%if &fmt_start_dt <= %sysfunc(today()) , &fmt_end_dt >= %sysfunc(today())
your fetch function re-create dataset variables macro variables, need reference them ampersand. also, should utilize today() function rather sysdate9 macro variable.
macros sas sas-macro do-loops
No comments:
Post a Comment