我在库中有100个数据集(称为DATA)。当我想将它们合并到一个数据集中时,SAS表示一些变量定义为字符和数字。所以我使用以下代码通过更改变量的格式来修改问题。但是,SAS仍然报告错误:当我尝试更改其格式时,变量已被定义为字符和数字。
编辑:我更改了代码并使用input
函数来解决此问题。但是,它报告了如图所示的相同错误:
%macro step1(sourcelib=,source=);
proc sql noprint; /*read datasets in a library*/
create table mytables as
select *
from dictionary.tables
where libname = &sourcelib
order by memname ;
select count(memname)
into:obs
from mytables;
%let obs=&obs.;
select memname
into : memname1-:memname&obs.
from mytables;
quit;
data
%do i=1 %to &obs.;
&source.&&memname&i
%end;
;
set
%do i=1 %to &obs.;
&source.&&memname&i
%end;
;
price1=input(price,best12.);
volume1=input(volume,best12.);
bid_imp__vol1=input(bid_imp__vol,best12.);
Ask_Imp__Vol1=input(Ask_Imp__Vol,best12.);
drop price volume bid_imp__vol ask_Imp__Vol;
run;
data
%do i=1 %to &obs.;
&source.&&memname&i
%end;
;
set
%do i=1 %to &obs.;
&source.&&memname&i
%end;
(rename=(price1=price volume1=volume bid_imp__vol1=bid_imp__vol Ask_Imp__Vol1=Ask_Imp__Vol));
run;
%mend;
%step1(sourcelib='DATA',source=DATA.);
答案 0 :(得分:1)
dictionary.columns
与此问题没有任何关系。类型是问题。格式是“你希望我如何以人类可读的格式打印出来”,但Type是“这块内存中的基本内容”。
你需要在这里做三件事之一。
在如上所述的宏中,您可以做的一件事是使用dictionary.columns
来确定哪些变量是错误的类型。由于你看起来有一组有限的变量(即,这不需要完全通用),你可以选择一种类型(听起来像数字)和查询import matplotlib.pyplot as plt
test_list = ['a', 'b', 'b', 'c']
plt.hist(test_list)
plt.show()
任何不属于的变量那种类型。然后将转换应用于符合条件(角色)的转换。
你构建宏的方式会使这个更复杂一点;我想你可能想要一个单独的宏来遍历每个数据集,并在你运行这个宏之前将它的类型一次转换为一致的类型。否则,管理宏变量列表会很头疼。