0% found this document useful (0 votes)
210 views8 pages

Exchanging Data Between SAS and Excel

The document discusses several methods for importing and exporting data between SAS and Microsoft Excel, including using data steps, PROC IMPORT/EXPORT, SAS/ACCESS LIBNAME statement, and pass-through facility. It provides code examples and discusses the pros and cons of each method. The document is intended help users choose the best method for their specific needs and situations.

Uploaded by

Rj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
210 views8 pages

Exchanging Data Between SAS and Excel

The document discusses several methods for importing and exporting data between SAS and Microsoft Excel, including using data steps, PROC IMPORT/EXPORT, SAS/ACCESS LIBNAME statement, and pass-through facility. It provides code examples and discusses the pros and cons of each method. The document is intended help users choose the best method for their specific needs and situations.

Uploaded by

Rj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

PaperCC011

ExchangingdatabetweenSASandMicrosoftExcel

YuqingXiao,SouthernCompany,Atlanta,GA

ABSTRACT
[Link]
developedbydifferentgroupsofpeople,[Link]
availabletoday,onemaywonderWhichwouldfitmysituationthebest?Thispaperbrieflydiscusesseveraloptions
forimportingandexportingdatafrom/toMicrosoftExcelusingSASandtheirprosandcons.

INTRODUCTION
[Link]
and/orliketoreceivereports,[Link]
somemayrequiremultiplesheetswithmanyformattingandtablessomearesimplecreationofnewworkbooks
some [Link]
developedand/[Link] learning themare
[Link]/exportingdataandincludessome brief
discussionontheirusages.NotethatallSAScodeanddiscussionsarebasedonSAS9.1.3althoughtheyarenot
limitedtoit.

IMPORT/EXPORTDATAFROM/TOEXCEL
SomeofthecommonwaysofImport/Export:
DataStep
SASImport/ExportFacility
SAS/ACCESSLIBNAMEStatement
SAS/ACCESSPassThroughFacility
SASXMLEngine
DynamicDataExchange(DDE)
ODS
SASAddIntoMicrosoftOffice

DATASTEP
IfyouhaveasimpleonesheetExcelworkbook,[Link]
[Link].

[Link]:
Filenamemyfilec:\mywork\[Link]
Datasasdat
Infilemyfiledlm=,firstobs=2missover
Inputvar1var2$var3$var4
Run

[Link],and
youhavethecontrolovervariablenames,typesand/[Link]
SAS(additionalstepsmaybeneededtoFTPCSVfiletoyourUNIXbox).Someofthedrawbacksarethatitdoesnt
workwithmultiplesheets,youhavetosupplythevariablenamesand/or informatspecifications(althoughyoucan
writemoresophisticatedcodetoautomate thejob),datagetshiftedwhenthereareblankcells,plusyoulose
additionalinformationthatcanbestoredinXLSformatwhenyouconvertit.

Forexport,[Link]
writeCSVfile,[Link]
workbookswithformulas,pivottablesetc,butwritingXMLfilefromscratchisnotadauntingtasktoaverageSAS
users.A trickfordoingthisistocreatetheworkbookwithallthedesiredfeaturesandsaveinXMLformatfirst, then
openitwithtexteditorandcopy/pastethetextintoyourSASprogram,wrapeachlineinPUT,manuallydeal
[Link]
[Link].

1
Codeexampleforoutput .CSVfile:
Filenamemyfilec:\mywork\[Link]
Data_null_
setsasdat
filemyfiledelimiter=','dsd
if_n_=1thendo
put'name1'',''name2'',''name3'
end
putvar1var2$var3$var4
Run

[Link],youneedtooutputthemto
SASdatasetsinordertousethismethod.

SASIMPORT/EXPORTFACILITY
Anothereasywaytoimport/exportXLSfileistouseSASImport/[Link],gotoFileImport
data,chooseMicrosoftExcelappropriateversionfromdropdownlist,chooseworkbookandworksheetyoudlike
toreadin,[Link]
alsosaveacopyofImport/Export WizardgeneratedIMPORT/EXPORTprocedurecodeforsubsequentuseorwrite
[Link]/ExportwizardforXLSformatonlyavailableforWindowsandPROCIMPORT/EXPORTcandeal
withXLSfileinbothWindowsandUNIXenvironmentbutthe XLSfilehastoresideonPC.

SASIMPORTWizard:

CodeexampleforPROCIMPORT(Windows):
ProcImportdatafile="c:\mywork\[Link]"
out=[Link]=excelreplace
sheet="mydata$"
getnames=yes
mixed=no
scantext=yes
usedate=yes
scantime=yes
Run

CodeexampleforPROCIMPORT(UNIX):
ProcImportdatafile="c:\mywork\[Link]"
out=[Link]=excelcsreplace
server=market /*NameofPCfilesserver */
port=1234 /*PortnumberlisteningonthePCserver*/
version='2002'
sheet=mydata
scantext=yes
usedate=yes
scantime=yes
dbsaslabel=none
textsize=512
Run

2
CodeexampleforPROCEXPORT(UNIX):
Procexportdata=[Link]
outfile="c:\mywork\[Link]"dbms=excelcsreplace
sheet=mydata
version="2002"
server=market /*Servername*/
port=1234 /*Portnumber */
Run

[Link]
[Link]
disadvantagesarethatSAS/ACCESStoPCfilesisrequiredforimporting/exportingXLSformat,youhavelittle
controlovervariablenames,typesand/[Link]
[Link],theentireworksheethastobeimported,you
cantchoosecolumnsand/orranges.

ThePROCIMPORT/EXPORTactually imports/exportsXLSfilesthroughgeneratedSAS/[Link]
[Link],candefinecolumnsandrangestobereadin,can
changevariablenames,types, [Link],itsonlyavailableunderWindowsandmightbealittlebit
beyondbeginnerSASusersscope.

CodeexampleforPROCACCESS:
ProcAccessdbms=xls
/*createaccessdescriptor*/
creatework.dat_view.access
path="c:\mywork\[Link]"
worksheet=mydata
range='a1..j39'
getname=yes
scantype=5
mixed=yes
assign=no
renamevar1=name1
var2=name2
format1 5.0
2 $4
/*createSASview*/
creatework.dat_view.view
selectvar1var2var3
Run
/*createSASdataset*/
Datasasdat
setwork.dat_view
Run

[Link]/exporting
XLSfileexceptthatfilecanbesavedunderboth WindowsandUNIXenvironment.

Codeexampletoread/write .DBFfile:
ProcImportdatafile="c:\mywork\[Link]"
out=[Link]=dbfreplace
getdeleted=no
Run
Procexportdata=[Link]
outfile="c:\mywork\[Link]"dbms=dbfreplace
Run

AfewdrawbacksarethatseparateDBFfilesmaybeneededformultisheetworkbooks,oneneedstopayextra
attentiontohiddencolumnsand/ordatafilters [Link],allthe
formattingarelostafterconversion.

3
SAS/ACCESSLIBNAMESTATEMENT
SAS/ACCESSprovidesothermeansofaccessing/[Link]
alibraryreferencetoanExcelworkbookanddirectlyreadfromand/[Link],usepcfilesoption
withservernameandportname [Link]
[Link],suchasdata
step,SASSQLandSASProcedures.

CodeexampleforImport/ExportExcelfiles(Windows):
Libnamemyxls'c:\mywork\[Link]'
/*importdata*/
Datasasdat
[Link]
Run
/*exportExcelworkbook*/
Datamyxls.mydata2
setsasdat
Run
Procsql
createtablemyxls.summaryasselectvar1,var2,var3
fromsasdatgroupbyvar4
quit
Libnamemyxlsclear

CodeexampleforImportExcelfiles(UNIX):
Libnamemyxlspcfilesserver=marketport=1234path='c:\mywork\[Link]'
Datasasdat
setmyxls.'mydata$'n
Run
Libnamemyxlsclear

SAS/ACCESSPASSTHROUGHFACILITY
AnalternativetoSAS/[Link]/ACCESStoconnectto
[Link]
dataorasubsetofthedata fromExcelworkbookworksheetsand/[Link]
WindowsandUNIXenvironment.

CodeexampleforSAS/ACCESSPassThrough(Windows):
Procsql
connecttoexcel(path='c:\mywork\[Link]')
createtablesasdatasselect*fromconnectiontoexcel
(selectvar1,var2,var3frommydata)
disconnectfromexcel
Quit

CodeexampleforSAS/ACCESSPassThrough(UNIX):
Procsql
connecttopcfiles(path='c:\mywork\[Link]'server=marketport=1234)
createtablesasdatasselect*fromconnectiontopcfiles
(select*frommydata)
disconnectfrompcfiles
Quit

SASXMLENGINE
[Link] translatesdatabetweenXMLdocumentandSASdata
[Link],withoutfurtherinstructions
[Link],youcancreateanXMLMapwhichtellsthe
[Link]
[Link]
primarypaneandcreateXMLMAPbydraganddropelementsfromXMLprimarypaneintoXMLMAPprimarypane,
thenspecifytheXMLMAPintheLIBNAMEstatementtotranslatetheXMLdocument.

4
SASXMLMapper:

CodeexampleforSASXMLengine:
/*assignlibreftoXMLdocumentlocationandspecifyXMLengine*/
Filenamemymap'c:\mywork\[Link]'
Libnamemypathxml'c:\mywork\[Link]'xmlmap=mymap
/*readinXMLdocumentwithdatastep*/
datasasdat
[Link]
run
/*readinXMLdocumentwithprocedures*/
proccopyin=mypathout=sasdat
selectgrades
run
/*createXMLdocumentwithdatastep*/
[Link]
setsasdat
Run

[Link]
independentcharacteristicmakesitveryusefulinsharingdatabetweendifferentpartiesandrelativelyimmuneto
[Link],[Link], inExcel,
[Link]
saveasXMLspreadsheet,theresultingfilestructurecanbe complicateandIhaventhadanysuccessbuildingXML
[Link],[Link],XML
[Link].

DYNAMICDATAEXCHANGE(DDE)
[Link]
spreadsheetsandSAS [Link],MicrosoftExcel
[Link]
[Link].
Tripletconsistsofthreepartsintheformapplicationname|topic!item,whereapplicationisExcelinthiscase,topic
[Link]
tripletistocopythedesiredrangeofcellsto theclipboardandtheninPCSAS,gotoSolutions>Accessories>DDE
[Link] last,you
maywanttoclosetheworkbookandExcelapplication.

[Link] filethroughDDE:
/*invokeExcelandopenworkbook*/
Optionsnoxwaitnoxsync
x'"c:\programfiles\microsoftoffice\office11\[Link]"'
Data_null_
rc=sleep(5)
Run

5
Filenameddecmddde'excel|system'
Data_null_
fileddecmd
put'[FILEOPEN("c:\mywork\[Link]")]'
Run
/*readdesiredrowsandcolumnsfromExcelfileintoSAS*/
Filenamemyfiledde'excel|c:\mywork\[[Link]]mydata!r2c1:r10c3'
Datasasdat
infilemyfilenotabdlm=09xdsdmissover
informatvar15.var2$4.var3$20.
inputvar1var2$var3$
Run
/*closeworkbookandquitExcel*/
Data_null_
filexlin
put'[FILECLOSE("c:\mywork\[Link]")]'
put'[QUIT()]'
Run

[Link]:
/*invokeExcelandopennewworkbook*/
Optionsnoxwaitnoxsync
x'"c:\programfiles\microsoftoffice\office11\[Link]"'
Data_null_
rc=sleep(5)
Run
/*saveblankspreadsheettodesiredlocation*/
Filenameddecmddde'excel|system'
Data_null_
fileddecmd
put'[[Link]("c:\mywork\[Link]")]'
Run
/*definefilerefusingDDEaccessmethod*/
Filenamemyfiledde'excel|c:\mywork\[[Link]]sheet1!r1c1:r&rows.c3'notab
/*writetoExcelworkbook*/
Data_null_
filemyfile
[Link]
if_n_=1thenput'name1''09'x'name2''09'x'name3'
putvar109xvar209xvar3
Run
/*saveworkbookandquitExcel*/
Filenameddecmddde'excel|system'
Data_null_
fileddecmd
put'[SAVE()]'
put'[QUIT()]'
Run

DDEgivesyoutheflexibilityofspecifyingthedesiredrangesforread/writeandcontrolovervariabletypesandlength.
Inaddition,youcanissueExcelcommandstocustomizethe spreadsheet,likesetformat,font,color,header/footeror
runmacros,[Link]
[Link]
[Link],youhavetoknowExcelcommandstodoformatting.

ODS
[Link]
withhighlycustomizedformatting. ODSorganizesoutputfromdatastepsorproceduresintoaseriesofobjectsand
[Link]
begenerated,suchasHTML,XML,[Link],[Link]
createmultisheetExcelworkbooks,[Link]/ordata

6
[Link]
yourownstyledefinitionormodifyanexistingone throughPROCTEMPLATE. Withcustomstyledefinitions,SAS
ODScangenerateverysophisticatedExcelworkbookwithformulas,highlighting,wrappedtextandmuchmore.

SamplecodeforcreatingmultisheetspreadsheetwithODS:
/*closeodslistingdestination*/
Odslistingclose
/*opentagsetsdestinationandsendoutputtoxmlfile*/
[Link]='c:\mywork'file='[Link]'style=mystyle
[Link](sheet_name=mydata)
Data_null_
setsasdat
fileprintods=(variables=(var1var2var3))
put_ods_
Run
[Link](sheet_name=summary)
OdsExcludeMomentsTestForLocation
Procunivariatedata=sasdat
Byvar2
varvar1
Run
/*closetagsetsdestinationandreopenlistingdestination*/
[Link]
Odslisting

ODSisanexcellentwayofexportingSASdatasetstoExcelworkbooksandcanmakefancylookingExcel
[Link]
possibledrawbackisthatexploringmanystyleoptionsforcustomizedformattingcanbetimeconsumingandmaynot
beyourbestchoicewhenmovingdataisthecentralfocus.

SASADDINTOMICROSOFTOFFICE
SASAddInforMicrosoftOfficeismynewfavoritemethodofsharingdatabetweenSASandMicrosoftOffice
[Link]
[Link],youcanopenSASdatasetinExcel,viewand/oreditdata,analyzethedataanddo
[Link]
SASdataset,findSASmenuinthetoolbar,selectSASOpenDataSourceIntoWorksheet,chooseyourSAS
[Link]
[Link],selectthedesiredrangeofdata,gotoSASActive
DataCopytoSASServer,usebrowsertofindthelocationwhereyoudliketosavethedata,name thedataset
thensave.

SASMenuinMicrosoftExcel:

[Link],SASAddInforMicrosoftOfficemustconnecttoan
[Link], thedatafoldermustberegisteredwith
[Link]
recordsatOptionswindowunderSASmenuitem.

CONCLUSION
Sofar,[Link] pros
[Link]
[Link],evenmore [Link] macroslike%sas2xls,

7
%[Link]%xlxp2sas,dataconversionsoftware,orsolutionswithotherlanguageslikeXML,VSTOandVBA
etc.

SummaryofDataExchangingMethods:
Available Available Workwith Excel OtherSAS
Import Export Workwith
withPC withUNIX Multisheet Formatting packages
capable capable procedures
SAS SAS workbook available required
DataStep
Import/Export
SAS/ACCESS
Wizard
Import/Export
SAS/ACCESS
procedure
ProcAccess SAS/ACCESS
SAS/ACCESS
SAS/ACCESS
LIBNAME
SAS/ACCESS
SAS/ACCESS
PassThrough
SASXML

Engine
DDE
ODS
SASAddIn SASBI

REFERENCES
1. SASOnlineDOC,SASInstituteInc.
<[Link]
2. ImportingExcelfilestoSASDatasets.
<[Link]
3. [Link]
<[Link]
4. LawrenceHelbers,AlexVinokurov. SASOutputtoExcel:DDEandBeyond.NESUG2002Conference.
5. [Link].NESUG2004Conference.
6. [Link].
SUGI2006Conference,paper11531.
7. [Link].7Apr.2005. SASL
<[Link]
8. [Link].23Jan.2006.
<[Link]

ACKNOWLEDGMENTS
IwouldliketothankmycolleaguesBobBolen,ChaoyingHsiehandDianCunninghamfortheirthoroughreviewand
valuablecomments.

CONTACTINFORMATION
[Link]:
YuqingXiao
SouthernCompanyMarketingServices
Bin10206
[Link]
Atlanta,GA30308
WorkPhone: (404)5064619
Email: yxiao@[Link]

[Link]
[Link].
Otherbrandandproductnamesaretrademarksoftheirrespectivecompanies.

You might also like