LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (December 2009, week 4)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Sat, 26 Dec 2009 08:52:02 -0600
Reply-To:   "Data _null_;" <iebupdte@GMAIL.COM>
Sender:   "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:   "Data _null_;" <iebupdte@GMAIL.COM>
Subject:   Re: comment on recent sample 35574 at SAS
Comments:   To: Chang Chung <chang_y_chung@hotmail.com>
In-Reply-To:   <200911042058.nA4H1w6J012977@malibu.cc.uga.edu>
Content-Type:   text/plain; charset=ISO-8859-1

I was browsing the scripting guys archive and noticed ScreenUpdateing "method?". The excel part can be sped up about 2x by using

objExcel.ScreenUpdating = False

Then turning it back on TRUE when you want to see the results.

Or you could run it in "silent mode" with visible=FALSE for the entire process.

On 11/4/09, Chang Chung <chang_y_chung@hotmail.com> wrote: > On Mon, 2 Nov 2009 11:58:33 -0600, Data _null_; <iebupdte@GMAIL.COM> wrote: > ... > >I don't now if this will be acceptable, but it does operate without > >SAS/ACCESS to PC file formats. It does require EXCEL. > ... > Hi, _null_, > > Thanks for sharing a piece of excellent code. I would add that in order to > run, it also requires Windows Script Host enabled. > > In terms of coding styles, it can be made clearer by separating (as much as > we can) the window scripting vbs code from the sas data step code. Here is > my try using a technique of expanding placeholders. I also love to clean up > as much as I can. This ran on sas 9.2 on windows vista with excel 2007 > installed locally. > > Cheers, > Chang > > > /* exporting dataset to an excel sheet > via WScript (vbs). Slow but flexible. > Modified from data _null_^s SAS-L > posting archived at UGA: http://tinyurl.com/yl9bvxb or > http://www.listserv.uga.edu/cgi-bin/wa?A2=ind0911a&L=sas-l&O=A&P=13475 > chang_y_chung@hotmail.com 20081104 > */ > > %let data = sashelp.shoes; > %let pwd = %sysfunc(pathname(WORK)); > %let vbs = &pwd\sas2exl.vbs; > %let xls = &pwd\sas2exl.xls; > > /* get the variable names and labels */ > proc contents data=&data out=contents(keep=name label > rename=(name=_name label=_label)) noprint; > run; > > /* write a WSH script in vbs. > substituting placeholders with data, if any */ > data _null_; > infile cards; > file "&vbs"; > length _inLine _outLine _value $32767; > input; > _inLine = _infile_; > > /* line without place holders */ > if index(_inLine, "#row#") = 0 then do; > _outLine = _inLine; > link putLine; > return; > end; > > /* header row */ > do _col = 1 by 1 while (not _headerDone); > set contents end = _headerDone; > _row = 1; > _value = quote(trim(_name)); > if not missing(_label) then do; > _newLine = " & vbLF & vbLF & "; > _label = quote(trim(_label)); > _value = catx(_newLine, _value, _label); > end; > _valueQuote = 0; > link expand; > link putLine; > end; > _nCols = _col - 1; /* we get to know the n columns */ > > /* other rows */ > do _row = 2 by 1 while (not _bodyDone); > set &data end = _bodyDone; > do _col = 1 to _nCols; > set contents point=_col; > _value = vvaluex(_name); > _valueQuote = 1; > link expand; > link putLine; > end; > end; > > return; /* end of main */ > > /* utilities */ > expand: > _value = trim(_value); > if _valueQuote then _value = quote(trim(_value)); > _outLine = trim(tranwrd(tranwrd(tranwrd(_inLine, > "#row#", strip(put(_row, best.))), > "#col#", strip(put(_col, best.))), > "#value#", _value) > ); > return; > > putLine: > _outLine = trim(_outLine); > _lineLength = length(_outLine); > put _outLine $varying. _lineLength; > return; > > /* vbs file template */ > cards; > ' sas2excel.vbs -- automatically generated > > ' open a sheet > Set app = CreateObject("Excel.Application") > app.Visible = True > app.DisplayAlerts = False > app.Workbooks.Add > > ' write data out > Set sheet = app.ActiveWorkbook.Worksheets(1) > sheet.Cells(#row#, #col#).Value = #value# > > ' a little bit of formatting > sheet.UsedRange.columns.autofit > > ' save the excel sheet and clean up > app.DisplayAlerts = False ' to overwrite > app.ActiveWorkbook.SaveAs(WScript.Arguments(0)) > app.Quit > set sheet = nothing > set app = nothing > ; > run; > > /* call the window script -- this should open excel */ > filename cscript pipe "cscript ""&vbs"" ""&xls"""; > data _null_; > infile cscript end=end; > do while(not end); > input; > put _infile_; > end; > stop; > run; > filename cscript clear; >


Back to: Top of message | Previous page | Main SAS-L page