此代码即使我只有3200个记录,也会生成大于5MB的文件大小。有什么建议 ?帮助您将不胜感激。从过去的两天开始,我一直在努力。
它给我的内存错误不足。我还有其他与该代码非常相似的代码,并且可以在没有任何错误的情况下运行该代码。
%macro report(date);
%let a= %eval(%sysfunc(today());
%let Year= %sysfunc(putn(&a,year4.));
%let Mon= %sysfunc(putn(&a,month2.));
%let Day= %sysfunc(putn(&a,day2.));
Proc SQL;
Create table vdata.Report as
Select Country, Province, City, Code, Link, Activity, First_Name, Last_Name,
Is_Coordinator, Is_Host, email, Phone, Business_Group, Managers_Email, Transportation
from V_Data.raw_plus_&date;
Quit;
Proc Sort data=vdata.PM_Report;
by Country Province Activity Last_Name;
run;
ods listing close;
ods tagsets.EXCELXP file="/path/ Report - &date..XML";
ods tagsets.ExcelXP options (Sheet_name="Report");
proc report data=vdata.Report nowd
style(header)=[font_weight=bold background=cxDCE6F1 font_size=1.2 ]
;
COLUMN ("Registration as of &Year-&Mon-&Day" ("Report" Country Province City Code Link Activity First_Name Last_Name
Is_Coordinator Is_Host email Phone Business_Group Managers_Email Transportation));
DEFINE Country / Display FORMAT= $char100. Style(column)=[WIDTH=75 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 LEFT "Country" ;
DEFINE Province / Display FORMAT= $char100. Style(column)=[WIDTH=60 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 LEFT "Province";
DEFINE City / Display FORMAT= $char100. Style(column)=[WIDTH=80 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 LEFT "City" ;
DEFINE Code / Display FORMAT= $char100. Style(column)=[WIDTH=170 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 Left "Project ID#" ;
DEFINE Link / Display FORMAT= $char100. Style(column)=[WIDTH=200 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Region" ;
DEFINE Activity / Display FORMAT= $char100. Style(column)=[WIDTH=500 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Select an Activity" ;
DEFINE First_Name / Display FORMAT= $char100. Style(column)=[WIDTH=90 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "First Name" ;
DEFINE Last_Name / Display FORMAT= $char100. Style(column)=[WIDTH=220 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Last Name" ;
DEFINE Is_Coordinator / Display FORMAT= $char100. Style(column)=[WIDTH=120 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Activity Coordinator" ;
DEFINE Is_Host / Display FORMAT= $char100. Style(column)=[WIDTH=80 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Host" ;
DEFINE Email / Display FORMAT= $char100. Style(column)=[WIDTH=250 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "e-mail" ;
DEFINE Phone / Display FORMAT= $char100. Style(column)=[WIDTH=100 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "phone #" ;
DEFINE Business_Group / Display FORMAT= $char100. Style(column)=[WIDTH=270 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Business Group" ;
DEFINE Managers_Email / Display FORMAT= $char100. Style(column)=[WIDTH=220 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Reporting Managers Email" ;
DEFINE Transportation / Display FORMAT= $char100. Style(column)=[WIDTH=220 font_size=1] style(header)=[background = CXC2D69A] SPACING=2 left "Transportaion needed?" ;
Compute country;
if country = "Canada" then
call define(_row_, 'style', 'style = {background=#FFFFFF FONT_SIZE=1}' );
else if country = "United States" then
call define(_row_, 'style', 'style = {background=#FFFFFF FONT_SIZE=1}' );
endcomp;
RUN;
ODS ods tagsets.ExcelXP CLOSE;
%Mend;
预先感谢。
我尚未对此进行测试,但我会害怕猜测这与您所导出的田地宽度有关。
检查所有要出口到Excel的变量的宽度。他们很宽。它们的宽度约为2500个字节。
Width*Rows = ~2500*3200 = 8,000,000 bytes = 8 megabytes
我不确定Excel是否对连续的太空字符进行任何压缩,但是如果没有,则可以很容易地解释大小。
对于任何过度宽的变量,将它们分配给length
语句的适当宽度。我很确定您不需要电话号码100的宽度(例如)。