2015-05-13 3 views
1

Надеюсь, вы сможете помочь.Формат SAS Данные из «плоского» источника данных

Im пытается прочитать данные из плоских мэйнфреймов с моей программой в SAS с этим кодом:

INFILE DG121 TRUNCOVER 
Missover FIRSTOBS=2 ; 


INPUT 
@ 1 LAENGDE IB2. 
@ 3 TOTANM IB2. 
@ 5 REXHTYP IB2. 
@ 7 RMODTAFD PD3. 
@ 10 RANVDATO PD5. 
@ 15 RKUNDENR PD6. 
@ 21 RBRKODE PD2. 
@ 23 RRAADGIV ÅCHAR1. 
@ 24 RKUNDKAT ÅCHAR3. 
@ 27 RMAXOPR PD8.2 
@ 35 RLOBTIDO PD2. 
@ 37 RPRODBET ÅCHAR6. 
@ 43 RMEDIE ÅCHAR5. 
@ 48 ROPSIG ZD3. 
@ 69 BRUGER IB4. 

I get the Note in my log: 
NOTE: Invalid data for RMODTAFD in line 47291 7-9. 
NOTE: Invalid data for RANVDATO in line 47291 10-14. 
NOTE: Invalid data for RKUNDENR in line 47291 15-20. 
NOTE: Invalid data for RBRKODE in line 47291 21-22. 
NOTE: Invalid data for RMAXOPR in line 47291 27-34. 
NOTE: Invalid data for RLOBTIDO in line 47291 35-36. 
NOTE: Invalid data for ROPSIG in line 47291 48-50. 
ERROR: Limit set by ERRORS= option reached. Further errors of this type will not be printed. 
RULE:  ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0      

47291  .ü.......................................................^.......................5\................. 
    ZONE 0A00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0500FFFFFFFFFFFFFFFFFFFF0FEFFFFFFFFFFFFFFFFF 
    NUMR 0100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0AFFFFFFFFFFFFFFFFFFFF550FFFFFFFFFFFFFFFFF 

    101 .......................rrrr{.r{.rr{...........¸...èhÇ..{..}.{ 161 
    ZONE FFFFFFFFFFFFFFFFFFFFFF0999990990999FFF00001120900058632900429 
    NUMR FFFFFFFFFFFFFFFFFFFFFF99999C99C999CFFF00691462D00548862C0078C 
LAENGDE=161 TOTANM=0 REXHTYP=-1 RMODTAFD=. RANVDATO=. RKUNDENR=. RBRKODE=. RRAADGIV=¤ RKUNDKAT=¤¤¤ RMAXOPR=. RLOBTIDO=. 
RPRODBET=¤¤¤¤¤¤ RMEDIE=¤¤¤¤¤ ROPSIG=. BRUGER=-1 _ERROR_=1 _N_=47290 
NOTE: EOV macro was not able to obtain an additional extent for library data set SYS15133.T093707.RA000.G46973.R0566335, volume 
     number 1. System rc = 00000B37; Reason code = 00000004. 
ERROR: Write to WORK.WAB.DATA failed. File is full and may be damaged. 

Моим вопрос. Я знаю, что мой формат PD не может читать символ. Но может я каким-то образом сделать SAS пропустить те данные, которые не могут читать, так что я не получаю записку: ПРИМЕЧАНИЕ: Неверные данные для ROPSIG в строке 47291 48-50

ответ

0

Вы можете использовать ?? модификатор входного формата, чтобы избавиться от ошибки и заставить sas перейти с обработкой. Проверьте модификатор формата в документации SAS для инструкции INPUT ->Format Modifiers for Error Reporting.

data input_data; 
infile datalines missover; 
input age ?? 8.; 
datalines; 
12 
45 
32 
A 
54 
Z 
66 
;;;; 
run; 
proc print data=input_data;run; 

Так что ваш код должен быть как:

INPUT 
@ 1 LAENGDE ?? IB2. 
@ 3 TOTANM ?? IB2. 
@ 5 REXHTYP ?? IB2. 
@ 7 RMODTAFD ?? PD3. 
. 
. 
. 

Кроме того, я хотел бы отметить, что на основании вашего журнала, ошибка, которая показывает вверх для пространства вне (B37 вне пространства ошибка на мейнфрейме). Попробуйте увеличить размер распределения библиотеки, в которой создается набор данных, чтобы предотвратить эту ошибку.

+0

Спасибо суши. Это было именно то, что я искал! Об ошибке в пространстве. Могу ли я увеличить рабочую область в своем SAS или мне как-то нужно сделать это на мэйнфрейме? –

+1

SAS будет использовать мэйнфрейм в качестве пути WORK. Проверьте работу DDNAME WORK в расширенном журнале, и вы сможете увидеть набор данных мэйнфрейма. Либо это будет постоянная информация, либо временный набор данных, несмотря на то, что вам нужно будет увеличить значение параметра SPACE =, чтобы избежать ошибки B37. – sushil

+0

я могу видеть мои мэйнфреймы набора данных: ПРИМЕЧАНИЯ: входной_файл DG121 является: Dsname = G41066.PUREX.HK000.WAB.HTB.DG121, единицы = 3390, Volume = A0243C, Disp = SHR, BLKSIZE = 27998, Lrecl = 23472, Recfm = VB Но могу ли я просто написать в моей программе SPACE = X номеров, которые я хочу в моем наборе данных? –