SAS PROC意味着StackODSOutput:一个名为;标签";
我对PROC Means和使用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
/* 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;