Can you provide some example input character strings with the date values you expect to create for those example strings?
Is the issue with the macro code? Or the SAS code you are using the macro to generate? Did you test the logic of the SAS code before wrapping it in a macro?
The macro seems to work in the sense that executes without any errors and generates SAS code that does not have any obvious syntax errors.
Bute the code it generates has some issues since it it treating the result of the SUBSTR() function call like it is a number and attempting to assign a numeric missing value to a character variable.
1977 options mprint;
1978 data test;
1979 string='12/12/2020';
1980 %datecharnum(number,string)
MPRINT(DATECHARNUM): if string ne "" then do;
MPRINT(DATECHARNUM): if find(string, "xx/xx")>0 then number = mdy(6, 1, substr(string, 7));
MPRINT(DATECHARNUM): else if find(string, "xx")>0 then number = input(substr(string, 4), anydtdte.)+14;
MPRINT(DATECHARNUM): * 15 of each month;
MPRINT(DATECHARNUM): else number = input(string, DDMMYY10.);
MPRINT(DATECHARNUM): end;
MPRINT(DATECHARNUM): else do;
MPRINT(DATECHARNUM): string = .;
MPRINT(DATECHARNUM): end;
MPRINT(DATECHARNUM): format number DDMMYY10.;
1981 put (_all_) (=);
1982 run;
NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
1:97
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
2:79
string=12/12/2020 number=12/12/2020
NOTE: The data set WORK.TEST has 1 observations and 2 variables.
... View more