SAS PROC意味着StackODSOutput:一个名为;标签";

SAS PROC意味着StackODSOutput:一个名为;标签";,sas,Sas,我对PROC Means和使用StackODSOutput选项有一个奇怪的问题。考虑这个例子。 我首先创建一个虚拟数据集进行分析 /* Step-1: Create a dummy dataset for analysis */ data ds1; label x = 'Variable X'; label y = 'Variable Y'; do i = 1 to 100; x = ranuni(1234); y = ranuni(567

我对PROC Means和使用StackODSOutput选项有一个奇怪的问题。考虑这个例子。 我首先创建一个虚拟数据集进行分析

/* Step-1: Create a dummy dataset for analysis */
data ds1;
    label x = 'Variable X';
    label y = 'Variable Y';
    do i = 1 to 100;
        x = ranuni(1234);
        y = ranuni(5678);
        keep x y;
        output;
    end;
run;
然后,我使用StackODSOutput选项运行一个PROC MEANS。这将创建一个名为“stats”的输出数据集

这个“stats”数据集有一个名为“Label”的变量。我知道变量存在,因为我做了一个proc内容,并且在那里看到了变量

/* Step-3: Confirm visually that there is a variable called Label in stats dataset */
proc contents data=stats varnum; run;
然而,我似乎无法在任何地方引用这个名为“Label”的变量。例如,下面的PROC SQL语句生成一个错误。我能够引用“Stats”数据集中的所有其他变量,没有任何问题

/* Step-4: But, I cannot seem to reference the variable called "Label" in stats dataset! */
proc sql;
    select Variable, Label from stats; 
quit;
错误如下:

43         proc sql; 
44          select Variable, Label from stats; 
ERROR: The following columns were not found in the contributing tables: Label. 
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements. 
45         quit;
你知道我做错了什么吗?我的SAS代码或SAS安装是否有问题

我的SAS版本是SAS 9.3(9.03.01M2P08152012)

谢谢

卡提克

根据Reeza的要求,这里是完整的日志输出

1                                                          The SAS System                          15:52 Wednesday, November 9, 2016

1          %_eg_hidenotesandsource;
5          %_eg_hidenotesandsource;
20         
21         /* Step-1: Create a dummy dataset for analysis */


22         data ds1;
23          label x = 'Variable X';
24          label y = 'Variable Y';
25          do i = 1 to 100;
26              x = ranuni(1234);
27              y = ranuni(5678);
28              keep x y;
29              output;
30          end;
31         run;

NOTE: The data set WORK.DS1 has 100 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


32         
33         /* Step-2: I run PROC means to capture the output in a dataset called stats */
34         proc means data=ds1 StackODSOutput mean;
35          var x y;
36          ods output summary=stats;
37         run;

NOTE: The data set WORK.STATS has 2 observations and 3 variables.
NOTE: There were 100 observations read from the data set WORK.DS1.
NOTE: PROCEDURE MEANS used (Total process time):
      real time           0.06 seconds
      cpu time            0.03 seconds


38         
39         /* Step-3: Confirm visually that there is a variable called Label in stats dataset */
40         proc contents data=stats varnum; run;

NOTE: PROCEDURE CONTENTS used (Total process time):
      real time           0.03 seconds
      cpu time            0.03 seconds


41         
42         /* Step-4: But, I cannot seem to reference the variable called "Label" in stats dataset! */
43         proc sql;
44          select Variable, Label from stats;
ERROR: The following columns were not found in the contributing tables: Label.
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
45         quit;
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds

2                                                          The SAS System                          15:52 Wednesday, November 9, 2016

46         /* What! */
47         
48         
49         
50         %_eg_hidenotesandsource;
62         
63         
64         %_eg_hidenotesandsource;
67         

我在运行代码时遇到了与您相同的问题。我有SAS 9.4,在Linux上运行。以下是我对这一问题的评价:

data _NULL_;
  set stats;
  put _all_;
run;
显示“Label”的变量名与看起来的不完全一样:

22         data _NULL_;
23           set stats;
24           put _all_;
25         run;

Variable=x Label   =Variable X Mean=0.461116 _ERROR_=0 _N_=1
Variable=y Label   =Variable Y Mean=0.525342 _ERROR_=0 _N_=2
请注意变量名“Label”和等号字符之间的空格。其他变量都不是这样的。可能变量的名称已损坏

字典中的变量名加载到另一个表中,并查看值:

proc sql;
  create table x as
  select name as nm from dictionary.columns
  where libname = 'WORK' and memname = 'STATS';
quit;

data _NULL_;
  set x;
  put nm= nm $hex32.;
run;
$HEX32.
格式将文本转换为ASCII码,因此您可以查看其中是否有任何无法打印的字符。此数据步骤的输出为:

22         data _NULL_;
23           set x;
24           put nm= nm $hex32.;
25         run;

nm=Variable 5661726961626C652020202020202020
nm=Label    4C6162656C0000002020202020202020
nm=Mean 4D65616E202020202020202020202020
查看Label变量,首先,它与下一个输出之间仍然存在差距。十六进制代码包含几个重复的零:

4C6162656C0000002020202020

4C=L
61=a
62=b
65=e
6C=l
00=?
20=<space>
查看输出数据集非常奇怪。数据集有两个称为“Label”的变量。我们知道一个是“Label”,另一个是“Label000000”


可能值得向SAS技术支持部门提出这一问题,因为它是
PROC MEANS
中的一个bug,请随意使用此答案。

这是一个bug。它创建一个带有尾随空格的变量名,如果validvarname设置为ANY,则在EG中可以使用该名称

修正:


代码对我来说很好。一次运行并再次检查,也许你忘了什么地方。您使用的SAS版本是什么?我在9.4TS1M3上。如果仍然不工作,请在一次运行中发布运行代码的完整日志。我的SAS版本是SAS 9.3(9.03.01M2P08152012)。此外,我还添加了完整的SAS日志。请尝试设置“option validvarname=v7;”开始时,请重试。如果没有,则发布proc内容的输出。我还建议通过技术支持来提高这一点。若你们知道这个问题,他们可以为你们指出正确的方向。或者至少可以跟踪它。找到一个格式良好的问题和一个有趣的问题会让人耳目一新。向上投票!下面是关于这个问题的讨论。SAS技术支持部门注意到了这一点。这就解决了问题。基本上,我必须在调用PROC MEANS之前添加“Option validvarname=V7;”语句,然后将其返回到默认的“Option validvarname=any;”。谢谢
4C=L
61=a
62=b
65=e
6C=l
00=?
20=<space>
data stats_fix;
  set stats;
  array c{*} _CHARACTER_;
  var=c[1];
  Label=c[2];
run;
Option validvarname=V7;