//CR2DST1 JOB ,'MASRIQUI',MSGCLASS=S,
//          CLASS=H,NOTIFY=COINEWM,TIME=1
/*JOBPARM SHIFT=D,LINES=200
/*ROUTE PRINT IOROOM
//*
//STEP1 EXEC SAS6,TIME=1
//RAWDATA DD DSN=COINEWM.CR2.SEQ,DISP=SHR
//SYSIN DD *
********************************************************************;
* THIS PROGRAM READS MIDAS DATA FROM : SEQUENTIAL DATA SET,        *;
* COINEWM.CR2.SEQ AND CALCULATES DISTANCE BETWEEN TWO OBSERVATIONS *;
*                                                                  *;
*                                                                  *;
*                                                                  *;
* BY  : H.S.MASHRIQUI.                                             *;
*                                                                  *;
********************************************************************;
*********       READ THE DATA FILE *********************************;
*********        COINEWM.CR2.SEQ   *********************************;
********************************************************************;
DATA A ;
   INFILE RAWDATA;
   INPUT TDDATEM  2-3      TDDATED  5-6      TDDATEY  8-11
         TDTIMEH  13-14    TDTIMEM  16-17    TDTIMES  19-20
         NDLATD   22-23    NDLATM   26-27    NDLATH   29-30
         NDLONGD  35-37    NDLONGM  40-41    NDLONGH  43-44
         H2OTEMP  260-266  CONDUCT  268-274  SALIN    276-282
         CHLFLUVT 284-290  AUXFLUVT 292-298
         LITTRAN  304-309
         CWNDSPD  329-333
         CMWDIR   343-345  AIRTEMP  347-351
         BAROPRES 353-357  SOLRAD   359-364 ;
********************************************************************;
********************************************************************;
**************   DISCARD BAD DATA     ******************************;
********************************************************************;
********************************************************************;
     IF ( TDDATED = 15 AND TDTIMEH = 20 AND TDTIMEM > 34 )
          THEN DELETE ;
     IF ( NDLATD   < 25.0 OR NDLATD   > 35 ) THEN DELETE ;
     IF ( NDLONGD  < 85.0 OR NDLONGD  > 99 ) THEN DELETE ;
     IF ( H2OTEMP  < 20.0 OR H2OTEMP  > 30 ) THEN H2OTEMP  = . ;
     IF ( CONDUCT  < 00.0 OR CONDUCT  > 10 ) THEN CONDUCT  = . ;
     IF ( SALIN    < 00.0 OR SALIN    > 36 ) THEN SALIN    = . ;
     IF ( CHLFLUVT < 0.05 OR CHLFLUVT > 1  ) THEN CHLFLUVT = . ;
     IF ( LITTRAN  < 0.00 OR LITTRAN  > 99 ) THEN LITTRAN  = . ;
     IF ( CWNDSPD  < 0.00 OR CWNDSPD  > 30 ) THEN CWNDSPD  = . ;
     IF ( CMWDIR   < 0.00 OR CMWDIR  > 360 ) THEN CMWDIR   = . ;
     IF ( AIRTEMP  < 00.0 OR AIRTEMP  > 39 ) THEN AIRTEMP  = . ;
     IF ( BAROPRES < 27.0 OR BAROPRES > 33 ) THEN BAROPRES = . ;
     IF ( SOLRAD   < 0.00 OR SOLRAD   > 1  ) THEN SOLRAD   = . ;
********************************************************************;
********************************************************************;
**************       CALCULATIONS     ******************************;
********************************************************************;
********************************************************************;
         RECNUM = _N_ ;
         FLAT = NDLATD  + ( NDLATM  + NDLATH/100  )/60 ;
         FLON = NDLONGD + ( NDLONGM + NDLONGH/100 )/60 ;
********************************************************************;
         DIFLAT = ABS( DIF1( FLAT ) )   ;
         DIFLON = ABS( DIF1( FLON ) )   ;
********************************************************************;
         DIFSUM1 = ( DIFLAT * 110.848 ) ** 2 ;
         DIFSUM2 = ( DIFLON *  96.488 ) ** 2 ;
         DIFSUM  = DIFSUM1 + DIFSUM2 ;
         DIST = SQRT( DIFSUM ) ;
********************************************************************;
         IF RECNUM = 1 THEN CUMDIST = 0 ;
         IF RECNUM = 1 THEN CUMDIST1 = 0 ;
         IF RECNUM = 1 THEN TCUMDIST = 0 ;
         IF RECNUM = 1 THEN DIST = 0 ;
         IF RECNUM = 1 THEN NUMB = 0 ;
         RETAIN CUMDIST ;
         RETAIN TCUMDIST ;
         RETAIN NUMB ;
         RETAIN STATUS ;
********************************************************************;
         TCUMDIST = TCUMDIST + DIST ;
         CUMDIST = CUMDIST + DIST ;
         CUMDIST1 = CUMDIST1 + DIST ;
         IF ( CUMDIST1 > 1 ) THEN
              CUMDIST1 = 0 ;
         IF CUMDIST1 = 0 THEN
            STATUS = 1 ;
         ELSE STATUS = 0 ;
         IF ( CUMDIST > 2.0 ) THEN
              CUMDIST = 0 ;
         IF ( CUMDIST = 0 ) THEN
              NUMB = NUMB + 1 ;
         ELSE NUMB = NUMB ;
********************************************************************;
********************************************************************;
  KEEP RECNUM FLAT FLON DIST TCUMDIST CUMDIST NUMB STATUS ;
********************************************************************;
********************************************************************;
PROC SORT DATA = A ; BY NUMB ;
PROC PRINT DATA = A ;
********************************************************************;
********************************************************************;
*PROC SORT DATA = A ; BY NUMB ;
*PROC MEANS DATA = A ; BY NUMB ;
 *    VAR H2OTEMP CONDUCT SALIN   CHLFLUVT LITTRAN
  *       CWNDSPD CMWDIR  AIRTEMP BAROPRES SOLRAD ;
   *  OUTPUT OUT = AA MEAN =
    *     M2OTEMP MONDUCT MALIN   MHLFLUVT MITTRAN
     *    MWNDSPD MMWDIR  MIRTEMP MAROPRES MOLRAD ;
*PROC PRINT ;
*DATA B ;
* SET A ;
* IF STATUS = 0 THEN DELETE ;
* KEEP RECNUM FLAT FLON DIST TCUMDIST CUMDIST NUMB STATUS ;
*PROC PRINT DATA = B ;
********************************************************************;
********************************************************************;
//
