You are on the right track. The character date string (NOTEDATE) first needs to be converted to a numeric date value with the INPUT function. The 5-digit results you see are correct, a SAS date is the number of days since Jan 1, 1960. You need to apply a format to the date value so it displays properly. Once you convert the date, you can find the number of days between the two dates with the INTCK function, and then subset the table appropriately.
For example:
data have1; infile cards dsd truncover; input fname :$12. dischdate :yymmdd10.; format dischdate yymmdd10.; cards; jane doe,2021-11-17 joe morris,2021-10-14 john doe,2021-11-15 mary jones,2021-11-12 tom brown,2021-12-02 ; run;
data have2; infile cards dsd truncover; input fname :$12. notedate :$11.; cards; jane doe,2021-11-15 joe morris,2021-10-17 john doe,2021-11-17 mary jones,2021-11-18 tom brown,2021-11-25 ; run;
data have3 (drop=notedate); merge have1 (keep=fname dischdate in=ina) have2(keep=fname notedate in=inb); by fname; if ina and inb; notedate_n=input(notedate,yymmdd10.); format notedate_n yymmdd10.; datediff=intck('day', dischdate, notedate_n); if -3 <= datediff <= 3; run;
If you get any notes/errors/warnings with your code, please send in the entire log so we can better determine the issue.
... View more