Showing posts with label TRICKS. Show all posts
Showing posts with label TRICKS. Show all posts
Sunday, 13 March 2016
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:
To set orientation and paper size:
To remove page breaks and put dashes (-) across the page:
To reinstall page breaks (there is no space between the quotes):
To left justify output:
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";
options formdlim="-";
To reinstall page breaks (there is no space between the quotes):
options formdlim="";
To left justify output:
options nocenter;
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.
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.
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.
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.
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.
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. (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;
set &ds. end=finished;
array num_vars[*] _NUMERIC_;
array char_vars[*] _CHARACTER_;
array char_vars[*] _CHARACTER_;
array num_miss [&num_qty] $ (&num_qty * ‘missing’);
array char_miss [&char_qty] $ (&char_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 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;
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;
set &ds;
drop &mlist;
quit;
%mend DropMissingVars;
%DropMissingVars(DS=work.test);
%DropMissingVars(DS=work.test);
Tuesday, 20 October 2015
Monday, 19 October 2015
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"
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.
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
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.
Subscribe to:
Posts (Atom)


