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