我有一个包含2500个观察值和300个变量的mer文件。我使用proc import来读取SAS,但它只能读取200个变量和2500个观察值。日志表明导入成功。
我尝试过“getnames = no”并导致导入300个变量,但第一行包含变量名称,因此我想将其保留为“getnames = yes”。我已经尝试将mer文件转换为csv并进行proc导入,但我一直在收到错误。关于我做错了什么的任何想法?我正在使用SAS 9.3。
proc import datafile="XXX.mer"
out=xx.xxxxx dbms=dlm replace;
delimiter=",";
getnames=yes;
datarow=2;
guessingrows=5000;
run;
答案 0 :(得分:0)
诺曼:
您可以使用小型SAS程序向您显示数据文件标题行中控制字符周围的上下文。你应该看到0D 0A和09
data _null_;
infile "XXX.mer" recfm=n end=end;
retain cc_context mark;
length c $1;
input c $char1. ;
if not mark and c < '20'x then mark = _n_;
length cc_context $20;
if _n_ < lengthc(cc_context)
then substr(cc_context,_n_,1) = c;
else cc_context = substr(cc_context||c,2,20);
if _n_ = mark + 10 then do;
length info $150;
info = cc_context;
p = ANYCNTRL(info);
do while (p);
c = substr(info,p,1);
cx = '<' || put(c,$hex2.) || '>';
info = tranwrd(info,c,trim(cx));
p = ANYCNTRL(info);
end;
put info;
cc_context = '';
mark = 0;
mark_count + 1;
if mark_count >= 10 then stop; * limit the review;
end;
run;
答案 1 :(得分:0)
您是否尝试告诉PROC IMPORT读取没有列名的文件?
proc import datafile="XXX.mer"
out=xx.xxxxx dbms=dlm replace;
delimiter=","
;
getnames=no;
datarow=2;
guessingrows=5000;
run;
然后,您可以从第一行读取值并将其用作标签。
filename code temp;
data labels ;
infile "XXX.mer" dsd obs=1 ;
length varnum 8 name $32 label $256 ;
do varnum = 1 by 1 ;
input label @;
name = cats('VAR',varnum);
output ;
file code ;
put 'LABEL ' name '=' label :$quote. ';' ;
end;
run;
proc datasets lib=XX nolist;
modify XXXXX;
%include code / source2;
run;
答案 2 :(得分:0)
您的问题的简单解决方案如下 1)将文件拆分为2部分列1- 200和201,直到最后,确保两个文件都有一些公共密钥,以便以后合并它们 2)将它们导入两个单独的数据集中 3)使用proc sql并在公共密钥的帮助下合并数据集。
答案 3 :(得分:0)
我在这里遇到了同样的问题,这对我有用:
PROC IMPORT OUT= &BASE_SAIDA. DATAFILE= "bla bla bla"
DBMS=CSV REPLACE;
**delimiter='09'x;**
GETNAMES=YES;
RUN;
当我使用 DELIMITER = '09'x 时,它返回所有列。