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在同一个字段中,但或多或少都在那里。谢谢,销售代表补充道。。。。