File io SAS原始数据读取--具有不一致行和嵌入头的行指针

File io SAS原始数据读取--具有不一致行和嵌入头的行指针,file-io,sas,File Io,Sas,我想要读取的原始数据不仅跨多个不同的行,而且每个记录的行数也不相同。为了进一步复杂化,它也有标题出现在文件的中间,每一页都会破坏一切。 Time: 1:47pm Item Master Report For 06/06/2013 Report: GMRIMMSB Item Type: Nonstock Item Asset Inven Dsp

我想要读取的原始数据不仅跨多个不同的行,而且每个记录的行数也不相同。为了进一步复杂化,它也有标题出现在文件的中间,每一页都会破坏一切。

 Time: 1:47pm                                      Item Master Report For 06/06/2013                                 Report: GMRIMMSB

Item Type: Nonstock

Item  Asset  Inven  Dsp   ---Order---  ---Primary----                           Substute     Contract     Hazd   Count     
Stat  Class  Class  Unt   Unit   Conv   Loc    Vendor        Manufacturer Nbr   Item Nbr      Number      Flag   Cycle  
------------------------------------------------------------------------------------------------------------------------------------
  ITEM     20049 TEST PNEUMONIA S LATEX ZL22 (30859001)
 A    0173    6      PK     PK       1   NSL   2431       R30859001                                                     
     Vendor  1:      2431 FISHER SCIENTIFIC COMPANY                 2:      2658 REMEL
             3:       536 ABBOTT LABS - DIAGNOSTIC DIVISION         4:      1404 MUREX DIAGNOSTICS INC.

  ITEM     20051 ANTIGEN BACTER. WELLCOGEN ZL26 B1901-51
 A    0173    6      PK     PK       1   NSL   2431       30859602                                                      
     Vendor  1:      2431 FISHER SCIENTIFIC COMPANY                 2:      3804 CARDINAL HEALTH-ALLEGIANCE
             3:      2658 REMEL                                     4:       536 ABBOTT LABS - DIAGNOSTIC DIVISION
             5:      1404 MUREX DIAGNOSTICS INC.

  ITEM     20053 FILM DUPLICATING 10X12
 I    0173    14     BX     BX       1   NSX   1335       112010                                                        
     Vendor  1:      1335 AGFA CORPORATION

  ITEM     20055 FILM HTU 10 X 12
 I    0173    14     BX     BX       1   NSX   1335       094010                                                        
     Vendor  1:      1335 AGFA CORPORATION

  ITEM     20056 FILM HTU 8 X 10
 I    0173    14     BX     BX       1   NSX   1335       094008                                                        
     Vendor  1:      1335 AGFA CORPORATION

  ITEM     20057 SOL AXSYM FLUIDIES CHECK (09A3401)
 A    0173    119    BX     BX       1   NSL   536                                                                      
     Vendor  1:       536 ABBOTT LABS - DIAGNOSTIC DIVISION

  ITEM     20058 FILM DUPLICATING 8 X 10
 I    0173    14     BX     BX       1   NSX   1335       112008                                                        
     Vendor  1:      1335 AGFA CORPORATION

  ITEM     20059 FILM HTU 14 X 17
 I    0173    14     BX     BX       1   NSX   1335       094014                                                        
     Vendor  1:      1335 AGFA CORPORATION
Item  Asset  Inven  Dsp   ---Order---  ---Primary----                           Substute     Contract     Hazd   Count     
Stat  Class  Class  Unt   Unit   Conv   Loc    Vendor        Manufacturer Nbr   Item Nbr      Number      Flag   Cycle  
------------------------------------------------------------------------------------------------------------------------------------

  ITEM     20060 FILM HTU 30 X 35
 I    0173    14     BX     BX       1   NSX   1335       094030                                                        
     Vendor  1:      1335 AGFA CORPORATION

  ITEM     20061 FILM HTU 14 X 14
 I    0173    14     BX     BX       1   NSX   1335       094001                                                        
     Vendor  1:      1335 AGFA CORPORATION
这是我在SAS studio中使用的代码

libname mylib '/folders/myfolders/';

data myfile;
    length itm $ 4 itemnum 5 itemdesc $ 40 inac $ 2 assetcl $ 4 invcl 3 dspunit $ 2
ordunit $ 2 convr 4 loc $ 4 vndnum 4 manufnum $ 20 vendinfo $ 80; 
    infile '/folders/myfolders/ItemstrSM.txt' missover;
    input #1 itm $ itemnum itemdesc $ &
          #2 inac $ assetcl $ invcl dspunit $ ordunit $ convr loc $ vndnum manufnum 
          #3 vendinfo & $ ; 
run;

proc print data=myfile noobs;
run;

如果您不需要经常处理大量此文件,您可以简单地使用文本编辑器来解决此问题

将页眉替换为空白。 将“\n项”替换为“项” 将“\n”替换为空格 替换为“\n”
现在,文本文件中每行有一个条目。

处理重复标题行的一种解决方法是在主输入语句之前使用以下内容:

input @;
if _infile_ = "Header row text" then delete;

这将在不填充任何变量的情况下将整行加载到_infle_uu中,并保存它以供主输入语句处理,前提是它不是标题行

假设您向我们展示的相同格式仍在继续,并且每个项目的供应商不超过6家:

data test(drop=itm);
  length itm $4 itemnum 8 itemdesc $132
            inac $1 assetcl invcl 8 dspunit ordunit $2 convr 8 loc $3 vndnum 8 manufnum $132;
  infile "c:\users\c41928\documents\egreadin.txt" missover lrecl=32767 truncover;
  input itm $ @;
     if itm="ITEM" then 
      do;
        input itemnum itemdesc $ / 
                inac $ assetcl $ invcl dspunit $ ordunit $ convr loc $ vndnum manufnum /
                vendinfo1 $132.;
        if index(vendinfo1,"2:") then 
            input itm $ @;
            if itm="3:" then
            do;
              input @1 vendinfo2 $132.;
              input itm $ @;
              if  itm = "5:" then
                do;
                   input @1 vendinfo3 $132.; 
                   output;
                 end;
              else output;
            end; 
         else output;
       end;
    else delete;
run;
如果有一个未知的,可能是无限多的供应商,那么一个迭代的do循环将更合适。否则,如果已知供应商数量大于6,则可以添加更多do循环


不管怎么说,它不是很漂亮,但很管用

我将再次检查字符和数字变量,并在今晚重新提交。。。感谢您的帮助。如果有任何有用的信息,请添加任何其他信息!Vend1和Vend2在同一个字段中,但或多或少都在那里。谢谢,销售代表补充道。。。。