Join Now

Juletip #16: DROP det...hvis du kan!, option DKRICOND

by SAS Employee JesperMusaeus on ‎12-15-2014 03:52 AM (306 Views)

Statements som DROP, KEEP og RENAME giver normalt en ERROR, hvis man refererer felter der ikke findes i data. Hvilket også er fint under normale omstændigheder fordi man forventes at kende sine data og måske har skrevet noget forkert.

Men hvis man nu rent faktisk mener det man har skrevet og gerne vil droppe et felt, hvis det forekommer?

Så kan man bruge option DKRICOND til at styre om SAS skal melde det som en fejl eller ej.


Tidligere var man nødt til først at undersøge data f.eks. med proc contents eller dictionary tables og afhængig af resultatet lave sit DROP-statement.


I eksemplet herunder vil vi gerne droppe feltet: ET_FELT_SOM_MAASKE_FINDES (fra tabellen: sashelp.class).

Først vises normal SAS reaktion (giver en error),

og dernæst med option DKRICOND=NOWARN (giver ingen error)


BONUS: sidst i programmet, en lille bonus der viser hvordan man nemt sætter en option tilbage til default-værdien ved brug af funktionen GETOPTION og defaultvalue.

70
71   data test;
72     set sashelp.class(drop=ET_FELT_SOM_MAASKE_FINDES);
ERROR: The variable ET_FELT_SOM_MAASKE_FINDES in the DROP, KEEP, or RENAME list has never been referenced.
73   run;

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEST may be incomplete.  When this step was stopped there were 0
         observations and 0 variables.
WARNING: Data set WORK.TEST was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


74
75   ***Sæt DKRICOND til NOWARN;
76   options DKRICOND=NOWARN;
78
79   data test;
80     set sashelp.class(drop=ET_FELT_SOM_MAASKE_FINDES);
81   run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set WORK.TEST has 19 observations and 5 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


82
83   ***Sæt DKRICOND-tilbage til default og vis værdien;
84   options %sysfunc(getoption(DKRICOND,keyword,defaultvalue)); *<----------BONUS TIP, SÆT EN OPTION TILBAGE, SE MERE I JULETIP 16.2;
85   %put %sysfunc(getoption(DKRICOND,keyword));
DKRICOND=ERROR

Læs mere om DKRICOND http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000208086.htm

Læs mere om getoption i Juletip #16.2: https://communities.sas.com/docs/DOC-9954