To use this program, follow these steps:
  1. Open a SAS editor window (or another text editor)
  2. COPY the program below and PASTE it into the editor window
  3. Edit the program so that the FILE= specification points to where the data file is stored on your system
  4. Save the modified program file and RUN it using SAS
The program is below this line. If no program is listed, the URL to the EML document may be in error. If the EML file does not include all the information needed, the SAS program will have errors or be incomplete.

* Package ID: knb-lter-vcr.25.6;
* Cataloging System:VCR; 
* Data set title: Hourly Meteorological Data for the Virginia Coast Reserve LTER ; 
* Data set creator:  John Porter -  ; 
* Data set creator:  David Krovetz -  ; 
* Data set creator:  William Nuttle -  ; 
* Data set creator:  James Spitler -  ; 
* Metadata Provider:    - Virginia Coast Reserve Long-Term Ecological Research Project ; 
* Contact:  John Porter -    - jhp7e@virginia.edu; 
* Contact:    - Information manager - Virginia Coast Reserve Long-Term Ecological Research Project   - jporter@lternet.edu; 
        
Title1 ' Hourly Meteorological Data for the Virginia Coast Reserve LTER ' ; 
/* You should replace  'PUT-LOCAL-PATH-TO-DATA-FILE-HERE' (below) with the appropriate path;  
    to your data file (e.g., c:\mydata\datafile.txt). If you want to create a permanent SAS dataset, replace the WORK. specification  
    in the DATA statement (and SET statement in section for range checking) with a valid SAS Library reference. */ 
DATA WORK.data1; 
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */ 
infile 'PUT-LOCAL-PATH-TO-DATA-FILE-HERE'  delimiter=","
                TRUNCOVER DSD lrecl=32767 ; 
input                         STATION 
                                   YEAR 
                                  MONTH 
                                  DAY 
                                  TIME 
                                  PPT 
                                   AVG_T 
                                  MIN_T 
                                  MAX_T 
                                  AVG_RH 
                                  MIN_RH 
                                  MAX_RH 
                                  AVG_WS 
                                  AVG_WANG 
                                   STD_WANG 
                                   RAD_SOL 
                                  PAR 
                                  SOIL_T 
                                   ; 
if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */  
IF (PPT EQ .) THEN PPT= . ;  
IF (PPT EQ 9999) THEN PPT= . ;  
IF (AVG_T EQ .) THEN AVG_T= . ;  
IF (AVG_T EQ 99) THEN AVG_T= . ;  
IF (MIN_T EQ .) THEN MIN_T= . ;  
IF (MIN_T EQ 99) THEN MIN_T= . ;  
IF (MAX_T EQ .) THEN MAX_T= . ;  
IF (MAX_T EQ 99) THEN MAX_T= . ;  
IF (AVG_RH EQ .) THEN AVG_RH= . ;  
IF (AVG_RH EQ 999) THEN AVG_RH= . ;  
IF (MIN_RH EQ .) THEN MIN_RH= . ;  
IF (MIN_RH EQ 999) THEN MIN_RH= . ;  
IF (MAX_RH EQ .) THEN MAX_RH= . ;  
IF (MAX_RH EQ 999) THEN MAX_RH= . ;  
IF (AVG_WS EQ .) THEN AVG_WS= . ;  
IF (AVG_WS EQ 999) THEN AVG_WS= . ;  
IF (AVG_WANG EQ .) THEN AVG_WANG= . ;  
IF (AVG_WANG EQ 999) THEN AVG_WANG= . ;  
IF (STD_WANG EQ .) THEN STD_WANG= . ;  
IF (STD_WANG EQ 999) THEN STD_WANG= . ;  
IF (RAD_SOL EQ .) THEN RAD_SOL= . ;  
IF (RAD_SOL EQ 9999) THEN RAD_SOL= . ;  
IF (PAR EQ .) THEN PAR= . ;  
IF (PAR EQ 9999) THEN PAR= . ;  
LABEL STATION ='Climate Station Name-' ; 
LABEL YEAR ='YEAR-none' ; 
LABEL MONTH ='MONTH-none' ; 
LABEL DAY ='DAY-none' ; 
LABEL TIME ='Eastern Standard Time-HHMM' ; 
LABEL PPT ='Precipitation-mm' ; 
LABEL AVG_T ='Average Hourly Temperature-degrees-C' ; 
LABEL MIN_T ='Hourly Minimum Temperature-degrees-C' ; 
LABEL MAX_T ='Hourly Maximum Temperature-degrees-C' ; 
LABEL AVG_RH ='Average Relative Humidity-percent' ; 
LABEL MIN_RH ='Minimum Hourly Relative Humidity-percent' ; 
LABEL MAX_RH ='Maximum Hourly Relative Humidity-percent' ; 
LABEL AVG_WS ='Average Wind Speed-m/sec' ; 
LABEL AVG_WANG ='Average Wind Angle-degrees' ; 
LABEL STD_WANG ='Standard Deviation of Wind Direction-degrees' ; 
LABEL RAD_SOL ='Solar Radiation-KJoules/m2' ; 
LABEL PAR ='Photosynthetically Active Radiation-uein/m2' ; 
LABEL SOIL_T ='Average Hourly Soil Temperature (10 cm depth)-' ; 
/* Codes for STATION are:  
                                        'BRNV'   'Brownsville in Nassawadox, VA on TNC Brownsville Farm'   
                                        'HOGI'   'Hog Island, VA, in island center near cross island road'   
                                        'OYSM'   'Oyster, VA at LTER Lab in Shirley House, Rt 600'   
                                        'PHCK'   'Phillips Creek Marsh, Nassawadox, VA'  . 
*/ 
                            
run;
                
                
                
/* The analyses below are basic descriptions of the variables.
   After testing, they should be replaced. */
                
                
PROC FREQ; 
      TABLES  STATION; 
PROC FREQ; 
      TABLES  SOIL_T;  
PROC MEANS; 
        VAR YEAR ;  
PROC MEANS; 
        VAR MONTH ;  
PROC MEANS; 
        VAR DAY ;  
PROC MEANS; 
        VAR TIME ;  
PROC MEANS; 
        VAR PPT ;  
PROC MEANS; 
        VAR AVG_T ;  
PROC MEANS; 
        VAR MIN_T ;  
PROC MEANS; 
        VAR MAX_T ;  
PROC MEANS; 
        VAR AVG_RH ;  
PROC MEANS; 
        VAR MIN_RH ;  
PROC MEANS; 
        VAR MAX_RH ;  
PROC MEANS; 
        VAR AVG_WS ;  
PROC MEANS; 
        VAR AVG_WANG ;  
PROC MEANS; 
        VAR STD_WANG ;  
PROC MEANS; 
        VAR RAD_SOL ;  
PROC MEANS; 
        VAR PAR ; 
RUN;
                 
TITLE2 'Observations with one or more out of range values'; 
DATA bad1;
SET WORK.data1; 
* List cases where data is out of range;
* Note: if no out of range cases are detected, the variable names will be listed, but no actual cases; 
LENGTH BADVARS $ 255; 
IF ((MONTH NE .) AND (MONTH LT 1)) THEN BADVARS=CAT(TRIM(BADVARS),' MONTH-min'); 
IF ((MONTH NE .) AND (MONTH GT 12)) THEN BADVARS=CAT(TRIM(BADVARS),' MONTH-max'); 
IF ((DAY NE .) AND (DAY LT 1)) THEN BADVARS=CAT(TRIM(BADVARS),' DAY-min'); 
IF ((DAY NE .) AND (DAY GT 31)) THEN BADVARS=CAT(TRIM(BADVARS),' DAY-max'); 
IF ((TIME NE .) AND (TIME LT 0)) THEN BADVARS=CAT(TRIM(BADVARS),' TIME-min'); 
IF ((TIME NE .) AND (TIME GT 2399)) THEN BADVARS=CAT(TRIM(BADVARS),' TIME-max'); 
IF ((PPT NE .) AND (PPT LT 0)) THEN BADVARS=CAT(TRIM(BADVARS),' PPT-min'); 
IF ((AVG_T NE .) AND (AVG_T LT -33)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_T-min'); 
IF ((AVG_T NE .) AND (AVG_T GT 48)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_T-max'); 
IF ((MIN_T NE .) AND (MIN_T LT -33)) THEN BADVARS=CAT(TRIM(BADVARS),' MIN_T-min'); 
IF ((MIN_T NE .) AND (MIN_T GT 48)) THEN BADVARS=CAT(TRIM(BADVARS),' MIN_T-max'); 
IF ((MAX_T NE .) AND (MAX_T LT -33)) THEN BADVARS=CAT(TRIM(BADVARS),' MAX_T-min'); 
IF ((MAX_T NE .) AND (MAX_T GT 48)) THEN BADVARS=CAT(TRIM(BADVARS),' MAX_T-max'); 
IF ((AVG_RH NE .) AND (AVG_RH LT 10)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_RH-min'); 
IF ((AVG_RH NE .) AND (AVG_RH GT 105)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_RH-max'); 
IF ((MIN_RH NE .) AND (MIN_RH LT 10)) THEN BADVARS=CAT(TRIM(BADVARS),' MIN_RH-min'); 
IF ((MIN_RH NE .) AND (MIN_RH GT 105)) THEN BADVARS=CAT(TRIM(BADVARS),' MIN_RH-max'); 
IF ((MAX_RH NE .) AND (MAX_RH LT 10)) THEN BADVARS=CAT(TRIM(BADVARS),' MAX_RH-min'); 
IF ((MAX_RH NE .) AND (MAX_RH GT 105)) THEN BADVARS=CAT(TRIM(BADVARS),' MAX_RH-max'); 
IF ((AVG_WS NE .) AND (AVG_WS LT 0)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_WS-min'); 
IF ((AVG_WANG NE .) AND (AVG_WANG LT 0)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_WANG-min'); 
IF ((AVG_WANG NE .) AND (AVG_WANG GT 360)) THEN BADVARS=CAT(TRIM(BADVARS),' AVG_WANG-max'); 
IF ((RAD_SOL NE .) AND (RAD_SOL LT -100)) THEN BADVARS=CAT(TRIM(BADVARS),' RAD_SOL-min'); 
IF ((RAD_SOL NE .) AND (RAD_SOL GT 3800)) THEN BADVARS=CAT(TRIM(BADVARS),' RAD_SOL-max'); 
IF ((PAR NE .) AND (PAR LT -100)) THEN BADVARS=CAT(TRIM(BADVARS),' PAR-min'); 
IF ((PAR NE .) AND (PAR GT 6999)) THEN BADVARS=CAT(TRIM(BADVARS),' PAR-max'); 
IF (BADVARS NE ''); 
PROC PRINT data=bad1; 
RUN;