我想要阅读的原始数据不仅跨越几条不同的行,而且每条记录的行数也不相同。为了使事情进一步复杂化,它还会在每个破坏所有内容的页面之后出现在文件中间的标题。
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工作室中)....
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;
答案 0 :(得分:0)
如果您不需要经常处理大量此文件,则只需使用文本编辑器即可解决问题。
现在,文本文件中每行有一个条目。
答案 1 :(得分:0)
您可以用来处理重复标题行的一种解决方法是在主输入语句之前使用以下内容:
input @;
if _infile_ = "Header row text" then delete;
这会将整行加载到_infile_
而不填充任何变量并将其保存以供主输入语句处理(前提是它不是标题行)。
答案 2 :(得分:0)
假设您向我们展示了相同的格式,那么每个项目的持续时间不超过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;
如果有一个未知的,可能是无限数量的供应商,那么itterative do循环将更合适。否则,如果已知数量的供应商高于6,则可以添加更多的do循环。
无论如何,它不是很漂亮但它有效。