Showing posts with label TRICKS. Show all posts
Showing posts with label TRICKS. Show all posts

Sunday, 13 March 2016

Debugging a Macro with SAS System Options

The SAS System offers users a number of useful system options to help debug macro issues and 
 problems. The results associated with using macro options are automatically displayed on the SAS  Log.
Specific options related to macro debugging appear in alphabetical order in the following table.



Read More »

Saturday, 12 March 2016

Useful Printer System Options

If your printout in the SAS session begins with page 256, it reveals the number of times you ran the program before printing. Reset the beginning page number before your final run.

To reset the page number, the code is:


options pageno=1;  

To set orientation and paper size:


options orientation="landscape"; 
options orientation="portrait"; 
options papersize="legal";  

To remove page breaks and put dashes (-) across the page:

options formdlim="-"; 

To reinstall page breaks (there is no space between the quotes):


options formdlim=""; 

To left justify output:



options nocenter; 
Read More »

Friday, 11 March 2016

Debugging Complex Macros

It’s possible to write code generated by macros to an external file. The file can’t be access until the SAS session has ended. In SAS 6.12 you use the options RESERVEDB1 & MPRINT to achieve this. In version 8 you need to use the options MFILE & MPRINT. 

You then also need to define a fileref for MPRINT, to which the generated SAS code is written. 

filename mprint 'c:\macro.sas' ; 

This technique is very useful for complex macros with many loops and multiple ampersands since you can see the code that is generated. You can then run the code generated through data step debugger to resolve any problems or understand what is happening.

Read More »

Thursday, 31 December 2015

Specifying the most recently created data set to use in a read operation

By default, the _LAST_= system option is set to use the most recently created data set. This automatic feature is commonly found in procedure code when the DATA= option is omitted from a PROC.

 To override this built-in default, the _LAST_= system option can be defined as any valid temporary or permanent SAS data set name (refer to data set naming conventions).

The _LAST_= option can be specified in an OPTIONS statement, in the OPTIONS window, at SAS invocation, or in the configuration file.  
Read More »

Wednesday, 30 December 2015

Writing SAS source files included with a %INCLUDE statement to the SAS Log

By default, SAS source statements included with a %INCLUDE statement are NOT automatically written to the SAS Log. To print secondary SAS source statements included with a %INCLUDE statements, users will need to specify the SOURCE2 system option. 


The default setting is NOSOURCE2. Either option can be specified in an OPTIONS statement, in the OPTIONS window, at SAS invocation, or in the configuration file.  

Read More »

Preventing SAS data sets from accidentally being replaced

Users can specify the NOREPLACE system option to prevent a permanent SAS data set from being accidentally replaced with another like-named data set. Conversely, by specifying the REPLACE system option like-named data sets can be overwritten.

The REPLACE | NOREPLACE option can be specified in an OPTIONS statement, in the OPTIONS window, at SAS invocation, or in the configuration file.  
Read More »

Monday, 2 November 2015

SAS Utility: Drop the Variable if it’s Data is Missing

Drop any variable (Num/Char), if its data is missing in all of the observations…..
%macro DropMissingVars(DS=);
data _null_;
set &ds. (obs=1);
array num_vars[*] _NUMERIC_;
array char_vars[*] _CHARACTER_;
call symputx(‘num_qty’, dim(num_vars));
call symputx(‘char_qty’, dim(char_vars));
run;
data _null_;
set &ds. end=finished;
array num_vars[*] _NUMERIC_;
array char_vars[*] _CHARACTER_;
array num_miss [&num_qty] $ (&num_qty * ‘missing’);
array char_miss [&char_qty] $ (&char_qty * ‘missing’);
length list $ 50;
do i=1 to dim(num_vars);
if num_vars(i) ne . then num_miss(i)=’non-miss’;
end;
do i=1 to dim(char_vars);
if char_vars(i) ne ” then char_miss(i)=’non-miss’;
end;
if finished then do;
do i= 1 to dim(num_vars);
if num_miss(i) = ‘missing’ then list=trim(list)||’ ‘||trim(vname(num_vars(i)));
end;
do i= 1 to dim(char_vars);
if char_miss(i) = ‘missing’ then list=trim(list)||’ ‘||trim(vname(char_vars(i)));
end;
call symput(‘mlist’,list);
end;
run;
data &ds;
set &ds;
drop &mlist;
quit;
%mend DropMissingVars;
%DropMissingVars(DS=work.test);
Read More »

Tuesday, 20 October 2015

Report Formatting: SKIP=

By default , all printed reports donot skip any lines at the top of the page.
Change this with the SKIP=n global  option.

OPTIONS SKIP=5;

TITLE"This Title will start on line5 of the page, not line1";

PROC PRINT DATA=sashelp.class;

RUN;


Read More »

Monday, 19 October 2015

Report Formatting: Remove Page Breaks

To stop SAS from issuing page breaks between pages of a reports,set the FORMDLIM option equal to a quoted blank.


OPTIONS FORMDLIM='';
PROC PRINT DATA=SOFTSALE;
RUN;
PROC FREQ DATA=SOFTSALE;


RUN;



FORMDLIM=''  removes all page breaks.


Read More »

Friday, 16 October 2015

Data Step Tip: COMPBL Function

To take extra blanks out of a variable  (character), use the COMPBL function.

Example:

                                  BIGNAME="MARY  JANE                SMITH"

                                   SMALLER=COMPBL(BIGNAME);


Resulting in:

                                                  "MARY JANE SMITH"
Read More »

Wednesday, 14 October 2015

Data Step Tip: Alignment Option

Analignment specification can be coded in the PUT statement.

Code-L,-C,or-R after the format.

Example:

124 DATA _NULL_;
125 SET NAMES;
126 PUT @1 NAME $30. -C;
127 RUN;
KATIE
TERESA
STEVE
ANN


NOTE: There were 4 observations read from the data set WORK.NAMES.
Read More »

Tuesday, 13 October 2015

Data Step Tip: Trailing @ For Efficiency

Use the trailing "@" with input statements to avoid inputting records you wish to eliminate.


 Instead of: 



DATA MIDWEST;
INFILE ACCOUNTS;
INPUT @1 NAME $19.
@20 STATE $2.
@24 ACCTNBR $10.
@35 BALANCE 8.;
IF STATE IN ('WI','MN','IA');
RUN;


Better:

DATA MIDWEST;
INFILE ACCOUNTS;
INPUT @20 STATE $2. @;
IF STATE IN ('WI','MN','IA') THEN
INPUT @1 NAME $19.
@24 ACCTNBR $10.
@35 BALANCE 8.;

RUN;




• More Efficient

• Different Layouts in One File

Read More »

Data Step Tip: Input @ ‘TEXT’

Using INPUT @ ' text' positions the input pointer directly after the word 'text'.


DATA NAMES;
LENGTH NAME CITY $10 ;
INPUT @1 NAME @ 'CITY=' CITY  AGE ;
DATALINES;
ABC CITY=BGLR 25
DEFGH CITY=HYD 30
IJKLMNO CITY=BGLR 28
PQRS CITY=HYD 26
;
RUN;

PROC PRINT DATA=NAMES;
RUN;;

output

Obs    NAME     CITY    AGE

1     ABC             BGLR     25
2     DEFGH        HYD       30
3     IJKLMNO    BGLR     28
4     PQRS            HYD      26


If the text is not found, the pointer will go to a new line



DATA NAMES;
LENGTH NAME CITY $10 ;
INPUT @1 NAME @ 'CITY=' CITY  AGE ;
DATALINES;
ABC CITY=BGLR 25
DEFGH CITY=HYD 30
IJKLMNO  BGLR 28
PQRS CITY=HYD 26
;
;
RUN;

PROC PRINT DATA=NAMES;


RUN;

output

Obs    NAME     CITY    AGE

1     ABC             BGLR     25
2     DEFGH        HYD       30
3    PQRS            HYD      26

in above example IJKLMNO is  missing because the string CITY=  
not found,so the pointer will go to a new line.



Read More »