To use this program, follow these steps:
* 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;