You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
10 KiB
Plaintext

7 months ago
{smcl}
{* version 1.0 26Feb2009}{...}
{hline}
help for {hi:saswrapper} {right:manual: {hi:[R] none}}
{right:dialog: {hi: none} }
{hline}
{title:Run a SAS program from within Stata}
{p 8 17 2}
{cmd:saswrapper}
[{varlist}]
{ifin}
[{cmd:using} {it:sas program filename}]
[{cmd:,}
{cmdab:pre:_sas_prog(`"}{it:sas code}{cmd:"')}
{cmdab:post:_sas_prog(`"}{it:sas code}{cmd:"')}
{cmdab:ch:eck}
{cmdab:me:ssy}
{cmd:usesas}
{cmd:nodata}
{cmd:savasas(}{it:sas dataset name}{cmd:)}
{cmd:noformats}
{cmd:rename}
{cmd:clear}
{cmd:char2lab}
{cmd:float}
{cmdab:qu:otes}]{p_end}
{title:Description}
{p 4 4 2}{cmd:saswrapper} runs a SAS program in batch and prints the output in the Stata results window/log file.
This usually occurs by specifying a SAS program file after {cmd:using}, but {cmd:saswrapper} can also run
SAS code specified by the {cmd:pre_sas_prog()} and/or {cmd:post_sas_prog()} options. By default, {cmd:saswrapper}
will save the current data in memory using {help savasas:savasas} and make it available in SAS's WORK library. If
that is not desired, use the {cmd:nodata} option. The {cmd:usesas} option tells {cmd:saswrapper} to load the
last SAS dataset created in the WORK library by the submitted SAS program into Stata using the {cmd:SAVASTATA} SAS macro.{p_end}
{p 4 4 2}{cmd:NOTE: saswrapper} calls SAS to run the SAS program. This requires the ability to run SAS on your computer.
If {cmd:saswrapper} does not run SAS for you, your {cmd:sasexe.ado} file may need to be edited to set the location of your
SAS executable file ({cmd:sas.exe}) and your {cmd:SAVASTATA} SAS macro file ({cmd:savastata.sas}).
It may be that {cmd:saswrapper} will be able to run with the default settings in {cmd:sasexe.ado}. See the
{help saswrapper##setup:setup instructions} below.{p_end}
{p 4 4 2}{cmd:saswrapper} uses the {cmd:SAVASTATA} SAS macro to create the Stata dataset from the SAS dataset when the
{cmd:usesas} option is specified. {cmd:saswrapper} downloads the {cmd:SAVASTATA} SAS macro and stores it where
user-written Stata ado-files are stored that begin with the letter "s". This macro can be used in SAS.
Learn about {cmd:SAVASTATA} here:
{browse "http://faculty.fuqua.duke.edu/~blanc004/sas_to_stata/savastata.html":http://faculty.fuqua.duke.edu/~blanc004/sas_to_stata/savastata.html }{p_end}
{title:Options}
{p 4 8 2}{cmd:using} {it:sas program filename} specifies {cmd:saswrapper} to run this SAS program. {cmd:saswrapper}
assumes the SAS program file extension {cmd:.sas} if no file extension/suffix is specified.{p_end}
{p 4 8 2}{cmd:pre_sas_prog()} and/or {cmd:post_sas_prog()} contain SAS code to be run by {cmd:saswrapper}. If SAS
programming code is supplied by {cmd:using}, {cmd:pre_sas_prog()}, and {cmd:post_sas_prog()} then the order the
code will be run is:{p_end}
{p 14 18 2}{cmd:pre_sas_prog()}{p_end}
{p 14 18 2}{cmd:using}{p_end}
{p 14 18 2}{cmd:post_sas_prog()}{p_end}
{p 8 8 2}It is best to enclose the SAS code within compound double quotes:{p_end}
{p 8 8 2}{cmd:. saswrapper, pre_sas_prog(`"proc means;"') }{p_end}
{p 8 8 2} in case the SAS code contains any double quotes. An interesting way to submit SAS code is
to first put it in a {help local:local} macro and use three forward slashes to continue the line:{p_end}
{p 8 8 2}{cmd:. local pre_sas_prog data new; /// }{p_end}
{p 8 8 2}{cmd: set work.stata_data; /// }{p_end}
{p 8 8 2}{cmd: gender = "female"; /// }{p_end}
{p 8 8 2}{cmd: run; }{p_end}
{p 8 8 2}{cmd:. saswrapper , pre_sas_prog(`" `pre_sas_prog' "')}{p_end}
{p 8 8 2}You can put a lot of SAS code in a {help local:local} macro if you don't use an equal sign ({cmd:=})
after then local macro name. For the above example to work, Stata has to be using the carriage
return as an end-of-line delimiter and not semi-colons which is changed by the {help #delimit:#delimit}
command. Stata will see Stata-style {help comments:comments} in the SAS code as Stata comments so
avoid starting a line with a star/asterisk "*":{p_end}
{p 8 8 2}{cmd: * some comment ; /// }{p_end}
{p 8 8 2} because Stata will comment out the three forward slashes at the end and thus end the input to the
local macro. Since the contents of the local macro will be one long line, do not attempt to do anything
in your SAS code that expects carriage returns like the SAS datalines statement that reads in raw data.{p_end}
{p 4 8 2}{cmd:check} specifies to generate basic stats for both the SAS and Stata datasets for the user
to make sure {cmd:saswrapper} created the files correctly. This is a comparison that should be done after
any datafile is converted to any other type of datafile by any software. The SAS file is created in the
same directory as the SAS program specified in {cmd:using} or if no program was specified in {cmd:using}
then it will be created in the current directory. The file is named starting with the name of the datafile
followed by "_SAScheck.lst" (SAS). e.g. "mySASdata_SAScheck.lst"{p_end}
{p 4 8 2}{cmd:messy} specifies that all the intermediary files created by {cmd:saswrapper} during its operation
are not to be deleted. The {cmd:messy} option prevents {cmd:saswrapper} from cleaning up after it has
finished. This option is mostly useful for debugging purposes in order to find out where something went
wrong. All intermediary files have a name starting with an underscore "_" followed by the process ID and
are located in Stata's temp directory.{p_end}
{p 4 8 2}{cmd:usesas} specifies to load the SAS dataset into memory that was most recently created in the
SAS WORK library in the SAS program submitted to {cmd:saswrapper}. {cmd:saswrapper} figures out how much
memory the SAS dataset will require to be loaded into Stata and sets Stata's memory for you if your memory
setting is less than is required.{p_end}
{p 4 8 2}{cmd:nodata} specifies to override the default behavior of {cmd:saswrapper} which is to save the
current dataset in memory to the SAS WORK library. Use this option when your SAS program is not going to
use the dataset in memory.{p_end}
{p 4 8 2}{cmd:savasas} specifies a different dataset name than the name of the dataset in memory.
If the dataset in memory does not have a name and the option {cmd:savasas} is not used, then the
dataset in memory will be available in SAS's WORK library as "stata_data" (a.k.a. "WORK.STATA_DATA").{p_end}
{title:Options when saving data to SAS}
{p 4 8 2}{cmd:varlist} specifies what selection of variables in the dataset in memory are to be saved
to the SAS dataset in the WORK library in the SAS program submitted to {cmd:saswrapper}. If no variables
are specified then all variables will be saved the SAS dataset.{p_end}
{p 4 8 2}{cmd:if} {it:exp} subsets the dataset in memory before saving the dataset to the SAS dataset in
the WORK library in the SAS program submitted to {cmd:saswrapper}.{p_end}
{p 4 8 2}{cmd:in} {it:range} subsets the dataset in memory before saving the dataset to the SAS dataset in
the WORK library in the SAS program submitted to {cmd:saswrapper}.{p_end}
{p 4 8 2}{cmd:noformats} specifies that no value labels be saved as SAS formats.{p_end}
{p 4 8 2}{cmd:rename} specifies that any required renaming of file name and/or variable names is
to be done when saving the dataset in memory to SAS using {help savasas:savasas}. The {cmd:rename}
option is only necessary when variable names are not unique in SAS. {cmd:savasas} displays the list
of renamed variables. {cmd:rename} also renames the SAS file name when the name provided is not a
valid SAS file name.{p_end}
{title:Options when using the usesas option}
{p 4 8 2}{cmd:clear} specifies to clear the data currently in memory before running {cmd:saswrapper}.{p_end}
{p 4 8 2}{cmd:char2lab} specifies to encode long SAS character variables like the Stata
command {help encode:encode}. Character variables that are too long for a Stata string
variable are maintained in value labels.{p_end}
{p 4 8 2}{cmd:float} specifies that numeric variables that would otherwise be stored as numeric type
double be stored with numeric type float. This option should only be used if you are certain you
have no integer variables that have more than 7 digits (like an id variable).{p_end}
{p 4 8 2}{cmd:quotes} specifies that double quotes that exist in string variables are to be replaced
with single quotes. Since the data are written out to an ASCII file and then read into Stata,
there are rare instances when double quotes are not allowed inside string variables.{p_end}
{title:Examples}
{p 4 8 2}{cmd:. saswrapper using "mySASprog.sas" }{p_end}
{p 4 8 2}{cmd:. saswrapper using "mySASprog.sas", nodata usesas clear }{p_end}
{p 4 8 2}{cmd:. saswrapper using "c:\data\mySASprog.sas", savasas(tester) check }{p_end}
{p 4 8 2}{cmd:. saswrapper , pre_sas_prog(`" proc print; "')}{p_end}
{p 4 8 2}{cmd:. saswrapper , pre(`" data new; set work.stata_data; if income > 0 then do; employed = 1; output; end; run; "') usesas clear}{p_end}
{p 4 8 2}{cmd:. saswrapper , post(`" proc univariate; "')}{p_end}
{p 4 8 2}{cmd:NOTE:} If you are setting up this program on your computer for
the first time, please edit sasexe.ado to set the location of your SAS
executable file (sas.exe). If you do not, {cmd:saswrapper} will try to set it
for you. The sasexe.ado file is an ASCII text file and should
be saved as such after editing. Stata's {cmd:do-file} editor will do the trick.{p_end}
{marker setup}
{title:Setting up saswrapper}
{p 4 4 2}
If you are setting up this program on your computer for the first time, you may need to edit the {cmd:sasexe.ado} file to
set the location of your SAS executable file ({cmd:sas.exe}). If you do not, {cmd:saswrapper} will look in the "usual"
locations for it. {cmd:saswrapper} also may need to have the location of the SAS macro {cmd:savastata.sas} set. The
{cmd:sasexe.ado} file is an ASCII text file and should be saved as such after editing. Stata's do-file editor will do
the job. {stata quietly adoedit sasexe:edit sasexe.ado} (click, to edit the {cmd:sasexe.ado} file, remember to save when
done.){p_end}
{title:Author}
{p 4 4 2}
Dan Blanchette {break}
Center of Entrepreneurship and Innovation {break}
Duke University's Fuqua School of Business {break}
Dan.Blanchette@Duke.edu{p_end}
{title:Also see}
{p 4 13 2}On-line: {help savasas:savasas}, {help usesas:usesas}{p_end}