我想做一件简单的事 - 在DATA句子中写一个PROC REPORT程序。我的主要想法是 - 如果数据步骤中的条件为真 - 让我们执行PROC REPORT,如果它是假的 - 不要执行PROC REPORT。有任何想法吗?代码现在运行没有错误,但是我发现IF语句中的条件没有应用,并且PROC REPORT是ececute,尽管条件没有得到满足。
先谢谢你。
%let DATO = 13062016;
PROC IMPORT OUT= WORK.auto1 DATAFILE= "C:\Users\BC1554\Desktop\andel.xlsx"
DBMS=xlsx REPLACE;
SHEET="sheet1";
GETNAMES=YES;
RUN;
data want;
set WORK.auto1;
rownum=_n_;
run;
DATA tbl2;
SET want;
if (rownum => 1 and rownum <=6 ) then output work.tbl2 ;
RUN;
ODS NORESULTS;
ods LISTING close;
ODS RTF FILE="C:\Users\BC1554\Desktop\Statistik_andel_&DATO..rtf";
title "Statistics from monthly run of DK shares of housing companies (andelsboliger)";
data Tbl21 ;
set work.Tbl2;
where (DKANDEL='Daekning_pct_24052016' or DKANDEL='Daekning_pct_18042016') ;
difference = dif(Andel);
difference1 = dif(Total);
run;
data Tbl211 ;
set work.Tbl21;
where (DKANDEL='Daekning_pct_18042016') ;
run;
data Tbl2111 ;
set work.Tbl211;
where (DKANDEL='Daekning_pct_18042016') ;
if abs(difference) > 10 and abs (difference1) > 107 then ;
run;
proc report data= work.Tbl2 spanrows;
columns DKANDEL Andel Total Ukendt ;
title2 "-";
title3 "We REPORT numbers on p.4-5".;
title4 "-";
title5 "The models coverage";
title6 "Run date &DATO.";
footnote1 "Assets without currency code not included";
define DKANDEL / order;
define Andel / order;
define Total / order;
define Ukendt / order;
define DKANDEL/ display;
define Andel / display;
Compute DKANDEL;
call define (_col_,"style","style={background=orange}");
endcomp;
Compute Andel;
call define (_col_,"style","style={background=red}");
endcomp;
run; title; footnote1;
ODS RTF close;
ODS LISTING;
title;
run;
答案 0 :(得分:1)
要有条件地执行代码,您需要使用宏,以便您可以使用像%IF
这样的宏逻辑来有条件地生成代码。
但是对于您的简单问题,您可以使用宏变量修改RUN;
步骤中的PROC REPORT
语句。当您不希望该步骤运行时,创建一个宏变量并将其设置为值CANCEL
。
%let cancel=CANCEL;
...
if abs(difference) > 10 and abs (difference1) > 107 then call symputx('cancel','');
...
proc report ... ;
...
run &cancel ;
简单的例子。如果有人年满13岁,则制作报告。
%let cancel=CANCEL;
data _null_;
set sashelp.class ;
if age=13 then call symputx('cancel',' ');
run;
proc report data=sashelp.class ;
run &cancel;
答案 1 :(得分:1)
在数据步骤中执行PROC REPORT(或在数据步骤中执行任何非数据步骤代码)的方式是call execute
。您可以使用call execute
来执行宏,或只使用一串代码;由您决定如何处理它。我会把它变成一个宏,因为这使得开发变得更容易(你可以像常规代码一样编写宏,你可以独立测试它。)
这是一个简单的例子,类似汤姆在答案中所说的。
%macro print_report(data=);
proc report data=&data.;
run;
%mend print_report;
data _null_;
set sashelp.class ;
if age=13 then do;
call execute('%print_report(data=sashelp.class)');
stop; *prevent it from donig this more than once;
end;
run;