2013-04-06 3 views
0

Я хочу прочитать следующий файл данных в SAS. Поскольку имена и значения разделены двумя пробелами, я использую амперсанд в инструкции ввода. Но кажется, что DLM='/' в инструкции infile конфликтует с ним. Может кто-нибудь сказать мне, что ошибка в моем коде?Как использовать амперсанд и разделитель в SAS

Файл:

1118 ART CONTUCK 57.69/65.20/120.50//152.60 
2287 MICHAEL WINSTONE 145.89 

Код:

data mylib.D_report; 
infile Dinning dlm='/' dsd missover; 
input ID 1-4 Name & $17. M1-M6; 
run; 

ответ

1

Вы смешивание входных стилей, которые в то время как понятно, учитывая, у вас есть довольно смешанные входные данные, не разрешается так, как вы делаете Это.

Ваш лучший вариант - прочитать M1-6 в одну переменную, а затем разделить его с помощью SCAN.

data work.D_report; 
infile datalines missover dlm=' '; 
input ID :4. 
     Name & $17. 
     Ms :$40.; 

array M[6]; 
do _t = 1 to countc(Ms,'/')+1; 
if _t > dim(M) then leave; 
M[_t]=scan(Ms,_t,'/','m'); 
end; 
datalines; 
1118 ART CONTUCK 57.69/65.20/120.50//152.60 
2287 MICHAEL WINSTONE 145.89 
;;;; 
run; 
+0

Я не знаю, что вы можете использовать массивы таким образом. Большое спасибо. – dirks

1

Вам просто нужно изменить разделитель.

data D_report; 
    dlm = ' '; 
    infile cards dlm=dlm missover dsd; 
    input ID 1-4 Name & $17. @; 
    dlm = '/'; 
    input M1-M6; 
    cards; 
1118 ART CONTUCK 57.69/65.20/120.50//152.60 
2287 MICHAEL WINSTONE 145.89 
run; 
proc print; 
    run; 

enter image description here

Смежные вопросы