我有一个像这样的宏:
%macro links;
PROC SQL;
CREATE TABLE T_US AS
SELECT DISTINCT
ID_SECON,
NO_BEN,
s_an
FROM rm.BENEF
;
QUIT;
proc sql;
select max(input(substr(s_an,1,4),4.)) into :max_sign
from T_US
;
quit;
%mend links;
然后我使用ODS创建报告:
%macro theRep();
options topmargin=1in bottommargin=1in
leftmargin=0.25in rightmargin=0.25in
;
ods tagsets.ExcelXP path="&cheminEx." file="&fi" style=seaside
options(autofit_height="yes"
pagebreaks="yes"
orientation="portrait"
papersize="letter"
WIDTH_POINTS = "12" WIDTH_FUDGE = ".0625"
absolute_column_width="110,175,180,200"
);
ods escapechar="^";
%theODS;
ods tagsets.ExcelXP close;
ods listing;
%mend theRep;
%macro theODS;
ods tagsets.ExcelXP
options(sheet_interval="none"
sheet_name="thename"
);
proc report data=T_US nowindows spanrows missing noheader
style(report)=[frame=box rules=all
foreground=black Font_face='Times New Roman' font_size=10pt
background=none]
style(column)=[Font_face='Times New Roman' font_size=10pt just=left]
;
col ID_SECON NO_BEN s_an;
define ID_SECON / group order=data noprint;
define NO_BEN / style(column)=[verticalalign=top];
define s_an / style(column)=[verticalalign=top];
compute before ID_SECON / style=[verticalalign=middle background=#f0f0f foreground=blue fontweight=bold font_size=12pt];
line ID_SECON $25.;
endcomp ;
title j=center height=12pt 'The title';
run;
%mend theODS;
该报告显示良好。但是问题是:
即使我在定义部分中没有要求,变量max_sign的值也会显示在报告的末尾。
请,您能帮忙吗?为什么变量wich不在数据集中T_US出现在报告中?
谢谢!
答案 0 :(得分:3)
SQL :into
子句根据语法将选择查询中的值转换为一个或多个宏变量。使用:INTO
时,不会自动禁止选择输出。使用NOPRINT
选项或RESET NOPRINT;
语句(仅SQL)抑制SQL输出。
所以你会想要的
proc sql noprint;
select max(input(substr(s_an,1,4),4.)) into :max_sign
from T_US
;
:INTO
子句还具有一个TRIMMED
选项,当在标题或脚注中使用转移的值并且'default'转移具有前导或尾随空格时,该选项很有用。
into :max_sign TRIMMED
答案 1 :(得分:1)
由于此步骤,可能正在显示max_sign的值:
proc sql;
select max(input(substr(s_an,1,4),4.)) into :max_sign
from T_US
;
quit;
不是PROC REPORT
。尝试添加NOPRINT
选项以禁止来自PROC SQL
的输出:
proc sql NOPRINT;
select max(input(substr(s_an,1,4),4.)) into :max_sign
from T_US
;
quit;
答案 2 :(得分:0)
正如其他人指出的那样,诀窍在于使用into :(some name)
和noprint
。另外,您应该知道宏变量本质上是一个字符串。为什么这有关系?如果将数字存储在宏变量中,则数字将按您输入的数字逐位存储。因此,强烈建议在将数字分配给宏变量之前对其进行格式化。
换句话说,如果真实值为2.36581
并将其格式化为2.4
并将其分配给宏变量,则无法获得更高的精度。宏变量中存储的全部是“两个,句号,四个”。