LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (April 2003, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Mon, 14 Apr 2003 14:38:26 -0400
Reply-To:     Patrice.Bourdages@IAAH.CA
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         Patrice.Bourdages@IAAH.CA
Subject:      Re: automatically indent SAS program
Comments: To: CLiu@BIOSTAT.BSC.GWU.EDU
Content-Type: text/plain; charset="iso-8859-1"

I don't know of any.... But I'm listening...

I have to work in Visual Basic and have one utility for that language that does exactly that... Would be nice to have something for SAS as well.

There's always the "manual" mode, in witch you spot the code manually (but it's a real bugger if you have a very long program).

Hope to hear from other SAS-L'ers as well...

Patrice Bourdages Information System Analyst Industrial Alliance, home and car insurance Phone: (418) 650-4600, extension 3216

-----Message d'origine----- De : Chenwei Liu [mailto:CLiu@BIOSTAT.BSC.GWU.EDU] Envoyé : 14 avril, 2003 14:24 À : SAS-L@LISTSERV.UGA.EDU Objet : automatically indent SAS program

Hello SAS-L, When I am working on a very old SAS program to which many programers have made changes, it is very helpful to reformat the program so that it is easier to read. I am wondering whether any body has used such a tool or SAS macro to make old SAS programs look better. Or whether is there an editor having such a function? The following example shows basically what I need, every line gets automatically indented.

Thanks in advance!

Chenwei Liu Research Associate/SAS Programmer The George Washington University Biostatistics Center 6110 Executive Boulevard, Suite 750 Rockville, MD 20852 Phone: (301) 881-9260 ext 7055 Email: Cliu@biostat.bsc.gwu.edu

PART OF THE OLD PROGRAM: ========================

LIBNAME &STUDY.&AUDIT "&STUDY.&AUDIT &WDISK"; LIBNAME &STUDY.MAST "&STUDY.MAST &WDISK"; LIBNAME &STUDY.SAS "&STUDY.SAS &WDISK"; LIBNAME &STUDY "&STUDY &EDISK";

**************************************************; ****** INITIALIZE ALL CUMULATIVE DATASETS ******; **************************************************;

OPTIONS YEARCUTOFF=1930; ****Y2K CODE IMPLEMENTED 10/13/98;

DATA ERRALL; DUMMY=1; OUTPUT; RUN;

/* ------------------------------------------------------------- */ /* THE ALLDEL DATA SET IS USED TO HOLD FORMS THAT HAVE BEEN */ /* DELETED AND THUS RESOLVING THE EDITS ON THOSE FORMS. */ /* ------------------------------------------------------------- */ %MACRO SETDEL; DATA ALLDEL; LENGTH NETWORK SORTER1 SORTER2 8. CENTER 2. FORM $5; RETAIN NETWORK SORTER1 SORTER2 CENTER . FORM ' '; STOP; RUN; %MEND; %SETDEL;

DATA ETSDATA; DUMMY=1; OUTPUT; RUN;

********************************************************************; *** START OF DOIT MACRO - RUNNING OF EDITS BY FORM ***; *** THE DOIT MACRO LOOPS THROUGH EACH FORM AND PERFORMS EDITS ON ***; *** ALL OF THE SELECTED FORMS FOR THE SELECTED WEEK RANGE -- ONE ***; *** WEEK, ALL WEEKS, OR A SET OF CONSECUTIVE WEEKS. ***; ********************************************************************;

%MACRO DOIT(FORM,SORTER1,SORTER2);

DATA EDITDATA; LENGTH SORTER1 SORTER2 8.; SET &STUDY.MAST.&FORM;

/* CHECK TO SEE IF WE IGNORE TEST NETWORK DATA */ %IF &NETTST = N %THEN %DO; WHERE (NETWORK < 10000); %END;

/* SUBSET ON ONE WEEK OR THE WEEK RANGE IF NOT EDITING ALL DATA */ %IF &ALLWEEKS=N %THEN %DO; IF &LOWK<=_BatchNo_<=&HIWK; %END;; WKOFFORM = _BatchNo_;

/* ASSIGN THE VALUES OF THE SORTER VARIABLES (IF ANY) TO */ /* THE VARIABLES SORTER1 AND SORTER2 */ %DO Q=1 %TO &NSORT; SORTER&Q = &&SORTER&Q; %END; RUN;

******************************************************************; ******* CREATE A DATASET OF ALL PATIENTS AND FORMS BEING *******; ******* EDITED AS PART OF THE EDIT TRACKING SYSTEM *******; ******************************************************************; DATA ETSDATA; SET ETSDATA EDITDATA(KEEP=CENTER NETWORK FORM_ SORTER1 SORTER2 CREATED_ UPDATED_ site digit letter); RUN;

PROC SORT DATA=ETSDATA; BY CENTER NETWORK FORM_ SORTER1 SORTER2; RUN;

THE REFORMATED PROGRAM: =======================

LIBNAME &STUDY.&AUDIT "&STUDY.&AUDIT &WDISK"; LIBNAME &STUDY.MAST "&STUDY.MAST &WDISK"; LIBNAME &STUDY.SAS "&STUDY.SAS &WDISK"; LIBNAME &STUDY "&STUDY &EDISK";

**************************************************; ****** INITIALIZE ALL CUMULATIVE DATASETS ******; **************************************************;

OPTIONS YEARCUTOFF=1930; ****Y2K CODE IMPLEMENTED 10/13/98;

DATA ERRALL; DUMMY=1; OUTPUT; RUN;

/* ------------------------------------------------------------- */ /* THE ALLDEL DATA SET IS USED TO HOLD FORMS THAT HAVE BEEN */ /* DELETED AND THUS RESOLVING THE EDITS ON THOSE FORMS. */ /* ------------------------------------------------------------- */ %MACRO SETDEL; DATA ALLDEL; LENGTH NETWORK SORTER1 SORTER2 8. CENTER 2. FORM $5; RETAIN NETWORK SORTER1 SORTER2 CENTER . FORM ' '; STOP; RUN; %MEND; %SETDEL;

DATA ETSDATA; DUMMY=1; OUTPUT; RUN;

********************************************************************; *** START OF DOIT MACRO - RUNNING OF EDITS BY FORM ***; *** THE DOIT MACRO LOOPS THROUGH EACH FORM AND PERFORMS EDITS ON ***; *** ALL OF THE SELECTED FORMS FOR THE SELECTED WEEK RANGE -- ONE ***; *** WEEK, ALL WEEKS, OR A SET OF CONSECUTIVE WEEKS. ***; ********************************************************************;

%MACRO DOIT(FORM,SORTER1,SORTER2);

DATA EDITDATA; LENGTH SORTER1 SORTER2 8.; SET &STUDY.MAST.&FORM;

/* CHECK TO SEE IF WE IGNORE TEST NETWORK DATA */ %IF &NETTST = N %THEN %DO; WHERE (NETWORK < 10000); %END;

/* SUBSET ON ONE WEEK OR THE WEEK RANGE IF NOT EDITING ALL DATA */ %IF &ALLWEEKS=N %THEN %DO; IF &LOWK<=_BatchNo_<=&HIWK; %END; ; WKOFFORM = _BatchNo_;

/* ASSIGN THE VALUES OF THE SORTER VARIABLES (IF ANY) TO */ /* THE VARIABLES SORTER1 AND SORTER2 */ %DO Q=1 %TO &NSORT; SORTER&Q = &&SORTER&Q; %END; RUN;

******************************************************************; ******* CREATE A DATASET OF ALL PATIENTS AND FORMS BEING *******; ******* EDITED AS PART OF THE EDIT TRACKING SYSTEM *******; ******************************************************************; DATA ETSDATA; SET ETSDATA EDITDATA(KEEP=CENTER NETWORK FORM_ SORTER1 SORTER2 CREATED_ UPDATED_ site digit letter); RUN;

PROC SORT DATA=ETSDATA; BY CENTER NETWORK FORM_ SORTER1 SORTER2; RUN;


Back to: Top of message | Previous page | Main SAS-L page