我最近在使用Proc report
时遇到了一个问题,即下面的代码仅输出第一个观察结果:
data have ;
input var1-var3 ;
datalines ;
1 10 100
2 20 200
3 30 300
4 40 400
;run ;
proc report data=have ;
columns var1 var2 var3 ;
define var1 / 'Variable 1' width=10;
define var2 / 'Variable 2' width=10;
define var3 / 'Variable 3' width=10;
run ;
它将正确报告所有4个观察结果:
var1
更改为字符变量(input var1 $ var2-var3
)define var1
定义为define var1 / display
我试图弄清楚为什么会发生这种情况的逻辑。由于所有group
值都是唯一的,因此将报告中的第一个变量作为数字默认值设置为display
变量而不是var1
,因此应该单独进行分组 - 而只报告了第一次观察。有人可以解释这个逻辑吗?
答案 0 :(得分:1)
通过在proc报告声明中添加list
选项,我能够找到幕后发生的事情的答案......
input var1-var3
(3x数字)将以下内容添加到日志中:
PROC REPORT DATA=WORK.HAVE LS=120 PS=44 SPLIT="/" CENTER ;
COLUMN ( var1 var2 var3 );
DEFINE var1 / SUM FORMAT= BEST9. WIDTH=10 SPACING=2 RIGHT "Variable 1" ;
DEFINE var2 / SUM FORMAT= BEST9. WIDTH=10 SPACING=2 RIGHT "Variable 2" ;
DEFINE var3 / SUM FORMAT= BEST9. WIDTH=10 SPACING=2 RIGHT "Variable 3" ;
RUN;
input var1 $ (var2 var3) (:)
(先设置为字符)会将以下内容添加到日志中:
PROC REPORT DATA=WORK.HAVE LS=120 PS=44 SPLIT="/" CENTER ;
COLUMN ( var1 var2 var3 );
DEFINE var1 / DISPLAY FORMAT= $8. WIDTH=10 SPACING=2 LEFT "Variable 1" ;
DEFINE var2 / SUM FORMAT= BEST9. WIDTH=10 SPACING=2 RIGHT "Variable 2" ;
DEFINE var3 / SUM FORMAT= BEST9. WIDTH=10 SPACING=2 RIGHT "Variable 3" ;
RUN;
因此,知道数字变量的默认值SUM
至少可以解释导致它的原因。虽然这会导致像这样的简单报告出现问题,但如果将var1
定义为by
组,则至少会正确报告总和:
data have ;
input var1 var2 var3 ;
datalines ;
1 10 100
1 15 150
2 20 200
3 30 300
4 40 400
;run ;
proc report data=have list ;
columns var2 var3 ;
by var1 ;
define var2 / 'Variable 2' width=10;
define var3 / 'Variable 3' width=10;
run ;
答案 1 :(得分:0)
您应该添加描述它们是什么类型变量的选项;如group
或analysis
,如下所示:
proc report nowd data=have ;
columns var1 var2 var3 ;
define var1 / group width=10 'Variable 1';
define var2 / analysis width=10 'Variable 2';
define var3 / analysis width=10 'Variable 3';
run ;
结果如下:
Variable 1 Variable 2 Variable 3
1 10 100
2 20 200
3 30 300
4 40 400