Sas 带有数字变量的过程报告
我最近在使用Sas 带有数字变量的过程报告,sas,Sas,我最近在使用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' w
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
更改为字符变量(输入var1$var2-var3
)define var1
为define var1/display
我正试图弄明白为什么会发生这种情况。不能将报告中的第一个变量作为数值默认为
组
变量,而不是显示
,因为所有var1
值都是唯一的,所以应该单独分组,而只报告第一个观察值。有人能解释一下逻辑吗?你只需要添加描述变量类型的选项;如组
或分析
,如下所示:
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
通过在proc report语句中添加
list
选项,我能够找到幕后发生的事情的答案
输入var1-var3
(3倍数字)将以下内容放入日志:
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;
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;
输入var1$(var2 var3)(:)
(设置第一个字符)将以下内容放入日志:
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;
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
被组定义为,它至少会正确报告一个总和:
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 ;
谢谢-虽然我试图找出默认赋值是什么,但当我运行您问题中的代码时,默认赋值没有指定,但它正确地报告了总和(10 100 1000
)。什么是不正确的?嗨@DWal,不是它错了-只是我认为define
中的默认赋值总是DISPLAY
而不是SUM