首页 文章

使用INFILE进行SAS PROC导入与DATA步骤

提问于
浏览
0

当我尝试读取包含地址字段的'〜'分隔文件时,我的PROC IMPORT步骤会导致“导入失败” . 在CSV文件中,5字节的邮政编码会被自动视为数字字段,偶尔我会收到包含无效邮政编码的错误数据记录为VXR1 @ . 遇到这种情况时,我收到“导入失败”错误,SAS作业失败 . PROC IMPORT会自动转换为带有infile的DATA步骤 . 所以我尝试使用INFILE选项的DATA步骤以及INFORMATS和FORMATS,并将ZIP的FORMAT更改为字母数字 . 但我现在遇到了不同的问题 . 使用DATA,INFORMAT和FORMAT关键字,长度不匹配正在发生,数据将自动移动到不同的位置 . 有人可以帮我找出解决这个问题的方法吗?

包含的PROC IMPORT我使用了以及以下使用的DATA文件步骤作为参考:

data WORK.TRADER_STATS                               ;
            %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
            infile '/sascode/test/TRADER_STATS.csv' delimiter = '~' MISSOVER DSD lrecl=32767 firstobs=2 ;
               informat TRADER_id best32. ;
               informat dealer_ids $60. ;
               informat dealer_name $27. ;
               informat dealer_city $15. ;
               informat dealer_st $2. ;
               informat dealer_zip $5. ;
               informat SNO best32. ;
               informat start_dt yymmdd10. ;
               informat end_dt yymmdd10. ;
            input
                        TRADER_id
                        dealer_ids $
                        dealer_name $
                        dealer_city $
                        dealer_st $
                        dealer_zip
                        sno
                        start_dt
                        end_dt
           ;
            if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
            run;


proc import file="/sascode/test/TRADER_STATS_BY_DAY.csv" out=WORK.TRADER_STATS_BY_DAY
dbms=dlm replace;
delimiter='~';
;run;

1 回答

  • 1

    尝试使用: colon operator,这将告诉SAS使用提供的信息但是在遇到分隔符时停止读取此变量的值,这将解决您的问题 - 数据自动移动到不同的位置

    data WORK.TRADER_STATS                               ;
                %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
                infile '/sascode/test/TRADER_STATS.csv' delimiter = '~' MISSOVER DSD lrecl=32767 firstobs=2 ;
                input       TRADER_id : best32.
                            dealer_ids : $60.
                            dealer_name : $27.
                            dealer_city : $15. 
                            dealer_st $ : $2. 
                            dealer_zip : $5. 
                            sno : best32. 
                            start_dt : yymmdd10. 
                            end_dt : yymmdd10.;
                if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
                run;
    

相关问题