Sas PROC FREQ中的数值或PROC PRINT中的格式化值
我的情况似乎很容易解决。但是,我正在努力寻找一个优雅的解决方案。我得到了已经格式化的数据。类似于下面的玩具数据集Sas PROC FREQ中的数值或PROC PRINT中的格式化值,sas,Sas,我的情况似乎很容易解决。但是,我正在努力寻找一个优雅的解决方案。我得到了已经格式化的数据。类似于下面的玩具数据集 proc format; value x1_f 1 = "Yes" 0 = "No"; value x2_f 1 = "Yes" 2 = "No"; run; data ds; input x1 x2; datalines; 1 2 1
proc format;
value x1_f 1 = "Yes"
0 = "No";
value x2_f 1 = "Yes"
2 = "No";
run;
data ds;
input x1 x2;
datalines;
1 2
1 1
0 1
;
data ds;
set ds;
format x1 x1_f.
x2 x2_f.;
run;
现在,作为数据管理过程的一部分,我使用x1
和x2
创建了一个2x2表。假设我正在检查数据,希望x1
和x2
始终一致
proc freq data = ds;
tables x1*x2;
run;
当我看报告时,我注意到x1和x2并不总是一致的。所以,我想把不一致的观察结果打印出来,看看我是否能找出可能发生的事情。因为这是一个玩具示例,所以没有其他变量可供查看,但希望您能理解
proc print data = ds;
where x1 = "Yes" & x2 = "No";
run;
SAS向我提供了以下错误:
ERROR: WHERE clause operator requires compatible variables
好的,我想我需要给SAS数值,而不是格式化的值。但是,当我查看前面的PROC FREQ
报告时,它只显示格式化的值。因此,我运行另一个PROC FREQ
proc freq data = ds;
tables x1*x2;
format x1 x2;
run;
现在我可以看到哪个变量使用0和1,哪个变量使用1和2
proc print data = ds;
where x1 = 0 & x2 = 1;
run;
终于,我得到了我想要的。这看起来真的很笨重和不雅。有人能告诉我如何在频率报告中同时查看数值和格式化值,或者如何在proc print中使用格式化值吗?如果您知道格式名称,请使用
WHERE
语句中的PUT()
函数
proc print data=sashelp.class ;
where put(age,2.) = '12';
run;
如果您不知道格式名称,则可以使用VVALUE()
函数。但您可能需要添加一个数据步骤才能使其工作
data to_print;
set sashelp.class ;
if strip(vvalue(age))='12';
run;
proc print data=to_print;
run;
在过去,我只创建一个单独的格式目录,其中包含标签中的值
proc format;
value x1_f 1 = "1=Yes" 0 = "0=No";
run;
然后,当您读取输出时,您知道变量实际具有的值。创建一个转换格式目录的程序非常简单。