Hello,
Apart from @PaigeMiller suggestion, you need to tell SAS that your are giving datetime vaues.
%Let T = %sysfunc(tzoneu2s(%sysfunc(tzones2u(%sysfunc(datetime()))),asia/singapore),datetime.);
%Put Test: &T;
/* You need to tell SAS that its a datetime value ("datetime value"dt)*/
/* Since the macro variable T has a value in date time */
%Let T1 = %sysfunc(intnx(dtmonth, "&T"dt, 0, E));
%Put Test1: &T1;
Another approache, leave them as SAS numeric date values and avoid giving the format.
/* In this example the macro varible simply holds numeric value, no format */
%Let T = %sysfunc(tzoneu2s(%sysfunc(tzones2u(%sysfunc(datetime()))),asia/singapore));
%Put Test: &T;
%Let T1 = %sysfunc(intnx(dtmonth,&T, 0, E));
%Put Test1: &T1;
/* Note: T1 is a numeric value that represent SAS Date, you may later need to apply format to it*/
... View more