SAS Question



Post anything related to mainframes (IBM & UNISYS) if not fit in any of the above categories

SAS Question

Postby ramchand4685 » Fri Dec 14, 2012 12:34 pm

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 ?
ramchand4685
 
Posts: 1
Joined: Fri Dec 14, 2012 12:19 pm
Has thanked: 0 time
Been thanked: 0 time

Re: SAS Question

Postby Robert Sample » Fri Dec 14, 2012 6:55 pm

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;
Robert Sample
Global moderator
 
Posts: 3719
Joined: Sat Dec 19, 2009 8:32 pm
Location: Dubuque, Iowa, USA
Has thanked: 1 time
Been thanked: 279 times


Return to All other Mainframe Topics

 


  • Related topics
    Replies
    Views
    Last post