*  THIS DATASET IS NAMED 'STORET.HELP.EXAMPLES.SAS.LIBRARY(OTREAD)'
*
*
** DELETE THIS LINE AND ALL PRECEEDING LINES BEFORE USING THIS FILE **

* MACRO (OTREAD)  - SAS -  READS STORET MORE=3,4 & SAS OT FORMATS
 *
  * WRITTEN BY LEE MANNING
   *
    * FUNCTION -
       BREAKDOWN A STORET MORE=4 OR MORE=3 OT FILE
       INTO ITS ELEMENTS FOR SUBSEQUENT PROCESSING BY ANY SAS
       PROCEDURES ;
OPTIONS NOSOURCE;
*   REF  -  THE STORET ADVANCED RETRIEVAL MANUAL UNDER PROGRAM
        'RET' FOR A DETAILED DESCRIPTION OF THE MORE=3,4 & SAS
        RECORD FORMATS.
    NOTE -  THIS ROUTINE DECODES DOUBLE-CHARACTER REMARK CODES
        STORED WITH USGS DATA, AS DESCRIBED WITHIN THE DATASET
        'STORET.HELP.USGS.REMARKS'
  *;
FORMAT DATE YYMMDD8.;
FORMAT TIME HHMM5.;
FORMAT DEPTH $6.;
FORMAT MEDIA $8.;
FORMAT SMK   $8.;
FORMAT UMK   $8.;
FORMAT USGSRMK $1.;
FORMAT BEGDATE YYMMDD8.;
FORMAT BEGTIME HHMM5.;
FORMAT REMDATE YYMMDD8.;
FORMAT REMTIME HHMM5.;
FORMAT ENDDATE YYMMDD8.;
FORMAT ENDTIME HHMM5.;
LENGTH AGENCY $ 8;
LENGTH STATION $ 24;
ARRAY P(I) P1-P50;
ARRAY R(I) $1 R1-R50;
INFILE OT LENGTH=L;
FORMAT MORE $3.;
RETAIN MORE '3';
IF _N_=1 THEN DO; INPUT @24 MORE $1. @;
IF MORE='9' THEN MORE='SAS';
PUT ' ';
PUT 'NOTE: OT FORMAT IS MORE=' MORE;
IF MORE='3' THEN DO;
PUT '      REMARK CODES, DEPTH INFORMATION, AND COMPOSITE';
PUT '      SAMPLE DESCRIPTORS WILL BE MISSING.';
PUT ' ';
END;  END;
INPUT @26 YYDLIM $2. @ ;
IF L=305 | L=350 | L=75 | L=120;
                 * OMITS PARAMETER HEADERS AND STATION HEADERS ;
IF YYDLIM^='99'; * OMITS DELIMITER RECORDS ;
INPUT @1 AGENCY $8. @9 STATION $15. @26 DATE YYMMDD6.
@32 KHR $2. KMN $2.
@36 (P1-P10)(RB4.) @;
IF L=120 THEN INPUT @76 MEDIA $8.
                    @84 SMK   $8.
                    @93 UMK   $8.
                    @    ;
IF MORE='3' THEN DO; INPUT; GO TO SKIP; END;
INPUT
@76 (P11-P50)(RB4.) @236 (R1-R50)($1.) @286 TYPE $1. @287 CALC $1.
@288 RYY 2. RMM 2. RDD 2. @294 RHR $2. RMN $2. @298 NUMBER $2.
@300 DEPTH $6. @;
IF L=120 THEN INPUT @76 MEDIA $8.
                    @84 SMK   $8.
                    @93 UMK   $8.
                    @    ;
INPUT;
IF RHR<'25' THEN REMTIME=HMS(INPUT(RHR,2.),INPUT(RMN,2.),0);
IF RYY>0 THEN REMDATE=MDY(RMM,RDD,RYY);
SKIP: IF KHR<'25' THEN TIME=HMS(INPUT(KHR,2.),INPUT(KMN,2.),0);
STATION=AGENCY||' '||STATION;
DO OVER P;  IF P > 0. & P < 1.E-15 THEN P=. ;  END;
IF AGENCY='112WRD' THEN DO;
  USGSRMK=NUMBER;                  * USGS 'SAMPLE' RMK CODE ;
  NUMBER='  ';
  END;
IF REMDATE ^= . &
    PUT(DATE,YYMMDD6.)||KHR||KMN <= PUT(REMDATE,YYMMDD6.)||RHR||RMN
     THEN DO;
       BEGDATE=DATE;BEGTIME=TIME;ENDDATE=REMDATE;ENDTIME=REMTIME;
     END;
IF REMDATE ^= . &
    PUT(DATE,YYMMDD6.)||KHR||KMN > PUT(REMDATE,YYMMDD6.)||RHR||RMN
     THEN DO;
       BEGDATE=REMDATE;BEGTIME=REMTIME;ENDDATE=DATE;ENDTIME=TIME;
     END;
DROP KHR KMN RYY RMM RDD RHR RMN REMDATE REMTIME YYDLIM I ;
OPTIONS SOURCE;
       *
       *
    SOURCE LISTING SUPPRESSED
 (FULL SOURCE - 'STORET.HELP.OTREAD')
       *
       *
    DEFINITION OF VARIABLES CREATED BY MACRO (OTREAD)

 MORE    - 3 CHAR CODE ('3','4', OR 'SAS')
 AGENCY  - 8 CHAR STORET AGENCY CODE
 STATION - 24 CHARACTERS
              8 - STORET AGENCY CODE
              1 - BLANK
             15 - STORET PRIMARY STATION IDENTIFIER
 DATE    - SAMPLE DATE (SAS DATE FORM)
 TIME    - SAMPLE TIME (SAS TIME FORM)
 DEPTH   - 6 CHAR SAMPLE DEPTH + REMARK
 MEDIA   - 8 CHAR SAMPLE MEDIA CODE.
 SMK     - 8 CHAR SAMPLE SMK CODE.
 UMK     - 8 CHAR SAMPLE UMK CODE.
 P1-P50  - 50 FLOATING POINT NUMBERS.
           VALUES OF 50 PARAMETERS.
 R1-R50  - 50 1 CHAR STORET RMK CODES
 USGSRMK - 1 CHAR USGS 'SAMPLE' RMK CODE
 BEGDATE - COMPOSITE SAMPLE BEGINNING DATE
 BEGTIME - COMPOSITE SAMPLE BEGINNING TIME
 ENDDATE - COMPOSITE SAMPLE ENDING DATE
 ENDTIME - COMPOSITE SAMPLE ENDING TIME
 TYPE    - COMPOSITE SAMPLE TYPE (STB)
 CALC    - COMPOSITE SAMPLE CALC CODE (AHLN)
 NUMBER  - COMPOSITE SAMPLE NO. OF GRABS (OR 'C') ;
*        ;
* - - - - - - - - - - - - - - - - - - - - - - - - ;
*                WARNING                          ;
* MACRO (OTREAD) CONTAINS A "DROP" STATEMENT.    ;
* USERS MAY -NOT- USE THE "KEEP" STATEMENT.       ;
*                                                 ;
* - - - - - - - - - - - - - - - - - - - - - - - - ;
* MACRO (OTREAD)  - END-OF-MACRO ;
* - - - - - - - - - - - - - - - - ;
