Page 1 of 1

SAS Question

PostPosted: Fri Dec 14, 2012 12:34 pm
by ramchand4685
I'm new to SAS i have very little knowledge in SAS ,

DATEIN   DD  *                                                 
/*                                                               
//DATEOUT  DD  DSN=MZ7P.TEST.SASDATE,                             
//             DISP=(OLD,PASS,DELETE),                           
//             DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=0),       
//             SPACE=(TRK,(10,10),RLSE),                         
//             UNIT=TEMPDISK                                     
//SYSPRINT DD  SYSOUT=*                                           
//SYSOUT   DD  SYSOUT=*                                           
//SYSIN    DD  *                                                 
                                                                 
                                                                 
  DATA DATES;                                                     
  INPUT DATEI  YYMMDD10.;                                         
  INFILE DATEIN;                                                 
  RUN;                                                           
  DATA DATE_CHECK;                                               
      SET DATES;                                                 
        IF DATEI   = ' ' THEN                                     
          DO;                                                     
            DATEVL = (TODAY() - 1);                               
            FORMAT DATEVL YYMMDDN8.;                             
          END;                                                   
        ELSE                                                     
          DO;                                                     
           DATEVL = DATEI;                                       
           FORMAT DATEVL YYMMDDN8.;                               
          END;                                                   
  FILE DATEOUT;                                                   
  PUT DATEVL;                                                     
  PROC PRINT;                                                     
  RUN;                                                           
  RUN;                                                           
//STEP40  EXEC PLIXG,                                     


My Else condition works perfectly , when there is nothing entered in DATEIN it needs to go into IF , This only works when i have a blank line after DATEIN. Can anyone help me on this ?

Re: SAS Question

PostPosted: Fri Dec 14, 2012 6:55 pm
by Robert Sample
The code in the DATE_CHECK DATA step will ONLY be executed if there is at least one record in DATES. This is because of how SAS handles empty data sets. The SAS support pages at http://www.sas.com describe their processing of empty data sets quite well. Code I've used in the past that works well for empty data sets is
DATA DUMMY;
     INPUT VAR1;
     CARDS;
DATA TWO;
%LET DNAME=DUMMY;  /*  NAME OF SAS DATA SET TO CHECK */

%MACRO NUMOBS(DSN);
 %GLOBAL NUM;
 DATA _NULL_;
    IF 0 THEN SET &DSN NOBS=COUNT;
    CALL SYMPUT('NUM',LEFT(PUT(COUNT,8.)));
    STOP;
 RUN;
 %MEND NUMOBS;
%MACRO CHECK;
   %LOCAL ONE;
   %NUMOBS(&DNAME);
   %LET ONE=#
   %IF &ONE NE 0 %THEN %DO;
       TITLE "THE &DNAME DATA SET";
       PROC PRINT DATA=&DNAME;
       %END;
   %ELSE %DO;
       %PUT  WARNING: THE DATA SET IS EMPTY ;
       %END;
%MEND;
%CHECK
RUN;