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
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}
|
||
|
|
||
|
|