2016-03-20 2 views
1

Я пытаюсь понять, как sas читает этот код.Как работает @@ во входной инструкции?

  data scores; 
    input Grade : $1. @@; 
    check='abcdf'; 
    if verify(grade,check)>0 then 
    put @1 'INVALID ' grade=; 
    datalines; 
a b c b c d f a a q a b d d b z 
    ; 
    run; 

Журнал дает следующий результат:?

INVALID Grade=q 
    INVALID Grade=z 

Может кто-нибудь сказать мне, как делает SAS читать данные и что делает @@ стоять ли каждое наблюдение поля - Оценка чтения для каждого "grade ="?

+0

Что вы сделали, чтобы попытаться понять это? Вы читали документацию? http://support.sas.com/documentation/cdl/en/lestmtsref/68024/HTML/default/viewer.htm#n0oaql83drile0n141pdacojq97s.htm – Tom

ответ

0
data scores; 
    input Grade : $1.; 

будет читать только первый символ на каждой строке. Это связано с тем, что после каждого выполнения инструкции input новая строка из файла считывается во входной буфер, даже если в текущей строке осталось много.

С помощью Grade : $1. @@; вы обязываете SAS не читать другую строку, если не обрабатываются все данные текущей строки.