在Proc Report中获取ACROSS变量值

时间:2016-02-24 18:51:59

标签: sas

(Cross SAS Communities site

我有兴趣在COMPUTE语句中使用我的Call Define语句的URL中的ACROSS变量的值。

在下面的示例中,PROC REPORT可以让我访问每个TYPES变量值的值......正在构建列,以便我可以在URL链接中包含该值吗?我可以使用N变量从COMPUTE语句中访问该值吗?

options missing="";
data REPORT;
 input VARIABLE $ TYPES $;
 datalines;
VAR1 TYPE1
VAR1 TYPE2
VAR1 TYPE3
VAR1 TYPE5
;
PROC FORMAT ;
 VALUE $TYPE
 'TYPE1'='Type 1'
 'TYPE2'='Type 2'
 'TYPE3'='Type 3'
 'TYPE4'='Type 4'
 'TYPE5'='Type 5';
Run ;
proc report data=REPORT nowd;
 column ("Variables" variable) ("TYPES" types,n);
 define variable / '';
 define types / across '' format=$type. preloadfmt;
 define n / '' format=comma12.;
 compute types;
  If _c2_>0 then
   call define("_c2_","style","style={url = '<MY URL>' );
 endcomp;
run;

1 个答案:

答案 0 :(得分:1)

您可以按照您构建的方式访问单个的值:

proc report data=REPORT nowd;
 column ("Variables" variable) ("TYPES" types,n);
 define variable / '';
 define types / across '' format=$type. preloadfmt;
 define n / '' format=comma12.;
 compute types;
  If _c2_>0 then
   call define("_c2_","style",cats("style={url = '",_C2_,"'" ));
 endcomp;
run;

当然,您无法访问行级值,因为跨变量不会以这种方式工作。

或者,如果您正试图获得&#34; Type 2&#34;等等,我想你会走这条路(使用格式, COL 而不是&#34; C2 &#34;)。我认为没有办法直接访问整个价值本身。

由于您可能会通过使用宏来单独构建这些计算块,因此我可能会避开该格式,并且如果可以的话,直接将变量的值传递给宏。如果没有,则格式可能有用。

PROC FORMAT ;
 VALUE $TYPE
 'TYPE1'='Type 1'
 'TYPE2'='Type 2'
 'TYPE3'='Type 3'
 'TYPE4'='Type 4'
 'TYPE5'='Type 5';
 value NType
 1='Type 1'
 2='Type 2'
 3='Type 3'
 4='Type 4'
 5='Type 5';
Run ;
proc report data=REPORT nowd;
 column ("Variables" variable) ("TYPES" types,n);
 define variable / '';
 define types / across '' format=$type. preloadfmt;
 define n / '' format=comma12.;
 compute types;
  If _c2_>0 then
   call define(_COL_,"style",cats("style={url = '",put(_COL_,NType.),"'" ));
 endcomp;
run;