Import 如何在SAS中从同一文本文件导入具有不同变量的不同数据集

Import 如何在SAS中从同一文本文件导入具有不同变量的不同数据集,import,sas,fixed-width,Import,Sas,Fixed Width,我有一个带有固定列的大文本文件,需要导入SAS。同一文件包含三个层次的信息:公司、联营公司和经济变量 每个观察值的第一个字符告诉我们,行中的值在哪一个级别,1是关于公司的,2是关于联营公司的。。。。根据布局,每个级别具有不同长度的不同变量 这是我必须导入的数据的一个小示例。前4个变量是相同的,但之后每个级别都有自己的不同长度的变量。变量类型标识观察的级别。所有其他变量都集中在其他变量中: DATA WORK.test; INFILE DATALINES; INPUT type $ 1-1

我有一个带有固定列的大文本文件,需要导入SAS。同一文件包含三个层次的信息:公司、联营公司和经济变量

每个观察值的第一个字符告诉我们,行中的值在哪一个级别,1是关于公司的,2是关于联营公司的。。。。根据布局,每个级别具有不同长度的不同变量

这是我必须导入的数据的一个小示例。前4个变量是相同的,但之后每个级别都有自己的不同长度的变量。变量类型标识观察的级别。所有其他变量都集中在其他变量中:

DATA WORK.test;
INFILE DATALINES;
INPUT
    type $ 1-1
    full_registry $ 2-2
type_update $ 3-3
cnpj $ 4-17
other $ 18-1200
)

读取此文件的最佳方式是什么

我想到了两种可能性:

I.阅读txt三次,每个级别有三种布局。扔掉那些读错的观察结果。我不确定这是否有效

二,。读取前4个变量,并将行的其余部分放在字符串变量上,就像我在本例中所做的那样。然后使用一组substr来分离几个变量。我不确定这是不是最聪明的方法

我是不是错过了一个更简单的方法


我使用的是企业版7.13。

您可以在输入语句末尾使用单个尾随@来保留当前行,以便在同一数据步骤中进一步输入语句。例如

DATA want;
INFILE DATALINES;
/*Always input the first 4 variables*/
INPUT type $ 1-1 full_registry $ 2-2 type_update $ 3-3 cnpj $ 4-17 @;
select(type);
when('1') input var1; /*fill this in with input rules for type 1 records*/
when('2') input var2; /*fill this in with input rules for type 2 records*/
otherwise input; /*do not input any other variables - just ignore the row*/
end;
DATALINES;
1F 000000000001911BANCO DO BRASIL SA     DIRECAO GERAL        022005110300                                                                                                                                                                 
2F 000000000001912MARCIO HAMILTON FERREIRA    000***923641**100000020101117                                                                                       
2F 000000000001912NILSON MARTINIANO MOREIRA   000***491386**100000020101117                                                                                                                          
2F 000000000001912WALTER MALIENI JUNIOR       000***718468**100000020101117                                                                                                                          
2F 000000000001912PAULO ROGERIO CAFFARELLI    000***415907**100000020120327                                                                                                                          
2F 000000000001912ADRIANO MEIRA RICCI         000***295868**100000020180412                                                                                                                          
2F 000000000001912MARCOS RENATO COLTRI        000***890627**100000020180418                                                                                                                           
2F 000000000001912CARLA NESI                  000***370266**100000020170614                                                                                                                           
6F 000000000001916499999                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
1F 000000000002722BANCO DO BRASIL SA     MANAUS (AM)          022005110300                                                                                                                        
1F 000000000003532BANCO DO BRASIL SA     SANTOS - SANTOS (SP) 022005110300                                                                                                                              
1F 000000000004342BANCO DO BRASIL SA     CAMPOS EST.UNIF.     022005110300                                                                                                                          
1F 000000000005152BANCO DO BRASIL SA     MACAPA-EST.UNIF.     022005110300                                                                                                                          
;;;;
run;
读第一个字符 为每种记录类型创建输入语句 使用1的输入,使用正确的输入语句。 您可能需要添加一些逻辑来跨行保存值,特别是如果您希望保留公司标题信息。

您可能还想考虑是否要将所有这些记录放到同一个数据集或三个不同的记录中,稍后可以进行管理。p>

data want;


input @1 type @;
if type = 'A' then 
    input .......;
else if type='B' then 
     input ....;

run;
data want;


input @1 type @;
if type = 'A' then 
    input .......;
else if type='B' then 
     input ....;

run;