/****************************************************************************/
/* TITLE: USING FUNCTIONS WITH %SYSFUNC */
/* AUTHOR: FOSTER KERRISON
*/
/* PHONE:
603-520-7520
*/
/* EMAIL: KERRISON@METROCAST.NET */
/* WEB: WWW.FOSTERKERRISON.COM */
/* PROGRAM: THIS PROGRAM ILUSTRATES HOW
%SYSFUNC CAN BE USED WITH */
/* DIFFERENT FUNCTIONS, HOW %SYSFUNC
CAN BE NESTED IN */
/* ONE LINE OF CODE, AND HOW A DATE
VALUE CAN BE CHANGED. */
/* WARRANTY: NO WARRANTY IS IMPLIED OR
EXPRESSED */
/****************************************************************************/
/*
USING A DATASTEP */
/* A DATASTEP ASSIGNS
THE NAME, TRANSLATES THE SPACES, AND SYMPUTS THE RESULT */
DATA
NOM ;
NAMED = ' PADDIE
' ;
NEWNAME = TRANSLATE(NAMED,"X","
") ;
CALL
SYMPUT('NOMAMA',NEWNAME)
;
RUN ;
/* THE RESULTING MACRO
VAR NAME IS NOMAMA */
%PUT
&NOMAMA ;
/* TAKE ALL THE
"Xs" OUT USING THE COMPRESS FUNCTION */
%let
MAMA = %sysfunc(COMPRESS(&NOMAMA,X));
%PUT
*&MAMA* ;
/* TRANSLATE THE SPACES
BACK INTO Xs */
%let
MAMA = %sysfunc(TRANSLATE(&NOMAMA,X,
));
%PUT
&MAMA ;
/* THAT IS THE END OF A
MIXED DATASTEP AND OPEN CODE EXAMPLE */
***************************************************************************;
/* NOW LETS LOOK AT AN
OPEN CODE EXAMPLE TO ACHIEVE THE SAME RESULT*/
/* STEP 1: ASSIGN THE
VALUE */
%let
BENIGN = ' PADDIE
' ;
%put
BENIGN = &BENIGN ;
/* NOW USE TRANSLATE TO
CHANGE THE SPACE TO X */
%let
NASTY = %sysfunc(translate(&BENIGN,"X","
" )) ;
%put
NASTY = &NASTY;
/* NOW TRANSLATE THE X
TO SPACES */
%let
BENIGN2 = %sysfunc(translate(&NASTY,"
" ,"X")) ;
%put
BENIGN2 = &BENIGN2;
/* AND FINALLY GET RID OF
THE QUOTES */
%let
BENIGN2 = %sysfunc(compress(&benign2,"'"))
;
%put
BENIGN2 = &BENIGN2;
/* COMBINE ALL OF THE
ABOVE INTO ONE LINE OF CODE*/
/* THE KEY IS THAT EACH
FUNCTION, MUST HAVE A %SYSFUNC NESTED INSIDE THE OTHER */
/* YOU CANNOT HAVE ONE
%SYSFUNC STATEMENT TO COVER ALL THE FUNCTIONS */
/* THE SYNTAX IS
CRITICAL */
%let
ONELINE= %sysfunc(compress(%sysfunc(translate((%sysfunc(translate(&BENIGN,"X","
")))," ","X")),"'() ")) ;
%put
ONELINE = &ONELINE ;
*****************************************************************************************;
/* USE %SYSFUNC TO
CONVERT DATES INTO SAS DATES */
/* ASSIGN THE DATES */
%let
txtdate = 120403 ; *
MMDDYY6 ;
%let
trydate =
/*
A MACRO APPROACH ... */
%macro
change_date (redate,sasfmt) ;
%let
txtdate = %sysfunc(inputn(&&redate,&sasfmt))
;
%mend
change_date ;
%change_date
(&txtdate,mmddyy6) ;
/* USING SYSFUNC IN
OPEN CODE ... */
%let
trydate = %sysfunc(inputn(&trydate,mmddyy8))
;
%put
THE MACRO CONVERTED THE TXTDATE TO: &txtdate ;
%put
THE OPEN CODE CONVERTED THE DATE TO: &trydate ;
/****************************************************************************/
/* TITLE:
TESTING DATASETS WITH %SYSFUNC
*/
/* AUTHOR: FOSTER KERRISON
*/
/* PHONE:
603-520-7520
*/
/* EMAIL:
KERRISON@METROCAST.NET */
/* WEB:
WWW.FOSTERKERRISON.COM */
/* PROGRAM: THIS PROGRAM ILUSTRATES HOW
%SYSFUNC CAN BE USED TO EXPLORE */
/* SAS DATASETS. IT ALSO SHOWS HOW TO
USE THE WINDOW IN SAS */
/* WARRANTY: NO WARRANTY IS IMPLIED OR
EXPRESSED */
/****************************************************************************/
/* MANUALLY ASSIGN THE
DATASET NAME */
%GLOBAL
DS OK ;
/* OUTPUT A WINDOW AND
SEEK INPUT */
%window
AAGGH IROW = 0 ROWS = 150
ICOLUMN = 0 COLUMNS = 125
COLOR = GREY
#4 @30
'THIS IS YOUR DATASET TEST' attr =
underline COLOR = GREEN
#12
@12 'ENTER THE DATASET NAME'
#14
@15 "THE LIBRARY NAME IS? "
attr=UNDERLINE c = BLUE
LIBR 20
attr=UNDERLINE c = BLACK REQUIRED = YES
#19
@15 "THE DATASET NAME IS? "
attr=UNDERLINE c = BLUE
DSNM 20
attr=UNDERLINE c = BLACK REQUIRED = YES
#25
@25 "PRESS
ENTER TO CONTINUE"
;
%display
AAGGH ;
/* CREATE THE MACROVAR
AND POPULATE THE VALUE */
%LET
NOM1 = &LIBR ;
%LET
NOM2 = &DSNM ;
%LET
ds = &NOM1..&NOM2 ;
%LET
OK = %SYSFUNC(EXIST(&DS)) ;
%MACRO
TESTER ;
%DO
R = 1 %TO
3 ;
%IF
%SYSFUNC(EXIST(&DS)) NE 1
%THEN %DO ;
/*
OUTPUT A WINDOW WITH THE BAD NEWS AND SEEK NEW INPUT */
%window
AAGGH IROW = 0 ROWS = 150
ICOLUMN = 0 COLUMNS = 125
COLOR = GREY
#4 @30
'THIS IS YOUR DATASET REPORT' attr =
underline COLOR = GREEN
#10 @12
"OOPS! "
#12
@12 "THE DATASET: &DS DOES
NOT EXIST ON YOUR SYSTEM"
#14
@12 'PLEASE CHECK THAT YOU TYPED THE
CORRECT DATASET NAME'
#16
@12 'RE-ENTER THE DATASET NAME TO TRY
AGAIN '
#18
@12 'YOU GET THREE TRIES BEFORE THE
PROGRAM SHUTS DOWN '
#20
@15 "THE LIBRARY NAME IS? "
attr=UNDERLINE c = BLUE
LIBR 20
attr=UNDERLINE c = white REQUIRED = YES
#25
@15 "THE DATASET NAME IS? "
attr=UNDERLINE c = BLUE
DSNM 20
attr=UNDERLINE c = white REQUIRED = YES
;
%display
AAGGH ;
/* RE-POPULATE THE
VALUE */
%LET
NOM1 = &LIBR ;
%LET
NOM2 = &DSNM ;
%LET
ds = &NOM1..&NOM2 ;
%END
;
%END
;
%IF
%SYSFUNC(EXIST(&DS)) NE 1
%THEN %DO ;
/*
OUTPUT A WINDOW WITH THE BAD NEWS THAT IT IS CLOSING DOWN */
%window
AAGGH IROW = 0 ROWS = 150
ICOLUMN = 0 COLUMNS = 125
COLOR = GREY
#4 @30
'THIS IS YOUR DATASET REPORT' attr =
underline COLOR = GREEN
#14
@12 " UNFORTUNATELY YOUR DATASET DOES
NOT EXIST "
#16
@12 "THIS PROGRAM IS NOW GOING TO
CLOSE TO ALLOW YOU TO CHECK THE SYSTEM"
;
%display
AAGGH ;
%END
;
/* IF THE DATASET
EXISTS THIS WILL LOOK AT IT AND PRODUCE A REPORT */
%IF
%SYSFUNC(EXIST(&DS)) = 1
%THEN %DO ;
/* ASSIGN THE DATASET
NAME */
%LET
DSNAME = &DS ;
/* OPEN THE DATASET */
%LET
DSID = %SYSFUNC(OPEN(&DSNAME))
;
/* IF THE DATASET
OPENED ...*/
%IF
&DSID %THEN %DO
;
/* DOES IT HAVE OBS? */
%LET
ANY = %SYSFUNC(ATTRN(&DSID,ANY))
;
/* HOW MANY OBS DOES IT
HAVE? */
%LET
OBS = %SYSFUNC(ATTRN(&DSID,NOBS))
;
/* HOW MANY VARS DOES
IT HAVE? */
%LET
VAR = %SYSFUNC(ATTRN(&DSID,NVARS))
;
/* WHAT IS THE LRECL?
*/
%LET
LREC= %SYSFUNC(ATTRN(&DSID,LRECL))
;
/* WHEN WAS IT CREATED?
*/
%LET
DTEC = %SYSFUNC(ATTRN(&DSID,CRDTE))
;
/* WHAT WAS THE DATE
AND TIME THAT IT WAS MODIFIED? */
%LET
DTE = %SYSFUNC(ATTRN(&DSID,MODTE))
;
/* IS IT PASSWORD
PROTECTED? */
%LET
PWD = %SYSFUNC(ATTRN(&DSID,ALTERPW))
;
/* WHAT ENGINE WAS USED
TO CREATE IT? NOTE: ATTRC, NOT ATTRN*/
%LET
ENG = %SYSFUNC(ATTRC(&DSID,ENGINE))
;
/* HAS IT BEEN SORTED?
NOTE: ATTRC, NOT ATTRN*/
%LET
SRT = %SYSFUNC(ATTRC(&DSID,SORTEDBY))
;
/* WHAT TYPE OF DATASET
IS IT? NOTE: ATTRC, NOT ATTRN*/
%LET
MDE = %SYSFUNC(ATTRC(&DSID,MODE))
;
/* CLOSE THE DATASET -
A CRITICAL STEP!*/
%LET
RC = %SYSFUNC(CLOSE(&DSID))
;
%END
;
/* CONVERT THE SASDATE
TO SOMETHING WE CAN READ */
/* THIS IS FOR THE
CREATION DATE */
%LET
DTXC = %SYSFUNC(PUTN(&DTEC,DATETIME25.));
/* THIS IS FOR THE
MODIFIED DATE */
%LET
DTX = %SYSFUNC(PUTN(&DTE,DATETIME25.));
/* LOOK AT THE RC FOR
ANY */
%IF
&ANY = 1 %THEN
%DO ;
%LET
ANX = THE DATASET HAS OBSERVATIONS ;
%END
;
%ELSE
%DO ;
%LET
ANX = THE DATASET HAS NO OBSERVATIONS ;
%END
;
/* TEST THE PASSWORD
PROTECTION */
%IF
&PWD = 1 %THEN
%DO ;
%LET
PWX = A PASSWORD IS NEEDED TO ALTER THIS DATASET ;
%END
;
%ELSE
%DO ;
%LET
PWX = NO PASSWORD IS REQUIRED TO ALTER THIS DATASET ;
%END
;
/* TEST TO SEE IF THE
DATASET HAS BEEN MODIFIED */
/* IF IT WAS NOT MODIFIED
*/
%IF
&DTEC = &DTE %THEN %DO
;
%LET
MOD = THE DATASET HAS NOT BEEN MODIFIED SINCE IT WAS CREATED ;
%END
;
/* IF IT WAS MODIFIED
*/
%ELSE
%IF &DTEC NE &DTE %THEN
%DO ;
%LET
MOD = THE DATASET WAS LAST MODIFIED ON: &DTX ;
%END
;
/* TEST TO SEE IF IT
WAS SORTED */
%IF
%LENGTH(&SRT) %THEN
%DO;
%LET
SXT = THE DATASET IS SORTED BY &SRT ;
%END
;
%ELSE
%DO ;
%LET
SXT = THE DATASET HAS NOT BEEN SORTED ;
%END
;
/*THIS IS THE REPORT ON
THE GOOD DATASET */
%window
BLOW IROW = 0 ROWS = 150
ICOLUMN = 0 COLUMNS = 125
COLOR = GREY
#4 @20
'THIS IS YOUR DATASET REPORT' attr =
underline COLOR = GREEN
#6 @12
"GOOD NEWS! "
#8 @12
"THE DATASET: &DSNAME EXISTS ON YOUR SYSTEM"
#10
@12 'FOR YOUR INFORMATION:'
#12
@12 "THE SAS ENGINE USED TO
ACCESS THE DATASET WAS: &ENG "
#14
@12 "&ANX"
#16
@16 "THERE ARE: &OBS
OBSERVATIONS "
#18
@12 "THERE ARE: &VAR
VARIABLES "
#20
@12 "THE LRECL IS: &LREC "
#22
@12 "THE DATASET WAS CREATED ON:
&DTXC "
#24
@12 "&PWX "
#26
@12 "&MOD "
#28
@12 "&SXT "
#30
@12 "THE DATASET MODE WHEN OPENED
WAS &MDE"
;
%display
BLOW ;
/* THIS IS A SECOND
REPORT ON THE GOOD DATASET */
%window
BLOW IROW = 0 ROWS = 150
ICOLUMN = 0 COLUMNS = 125
COLOR = GREY