2015-08-05 1 views
0

Я читаю Language Reference: Concepts; и он упомянул, что я могу использовать ~ (тильда), чтобы иметь дело с символьными значениями, имеющими разделители внутри значений символов.Измененный ввод списка с использованием dsd

И Ниже приведен пример кода

data scores; 
    infile datalines dsd; 
    input name : $9. Score1-score3 Team ~ $25. div $; 
    datalines; 
Smith,12,22,46,"Green Hornets, Atlanta",AAA 
Mitchel,23,19,25,"High Volts, Portland",AAA 
Jones,09,17,54,"Vulcans, Las Vegas",AA 
run; 

Я удивляюсь, почему существует проблема, если я закомментировать входной_файл заявление.

ответ

0

~ Tilde должен обрабатывать одиночные кавычки, двойные кавычки и разделители в символьных значениях особым образом. Этот модификатор формата считывает разделители в котируемых символьных значениях как символы вместо разделителей и сохраняет кавычки, когда значение записывается в переменную. Почему это необходимо, поскольку SAS зарезервировала определенные разделители для собственного функционирования, то есть одинарные кавычки, двойные кавычки используются для представления строк, когда вы хотите, чтобы SAS обрабатывал эти кавычки по-разному, вы должны явно указать это на SAS, используя - Тильда (~)

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000144370.htm

SAS может только автоматически распознавать один пробел как разделитель, и он не может автоматически распознавать как delimiter.You бы явно указать его в SAS. В вашем случае вы использовали опцию dsd, которая делает три вещи для вас.

(i) Он автоматически по умолчанию принимает, как ваш разделитель. Если вы хотите предоставить какой-либо другой разделитель, вам нужно будет указать его SAS, а затем использовать параметр dlm =.

(II) SAS обрабатывает два последовательные разделители как отсутствующее значение и удаляет кавычки из значений символов

(III) указывает, что, когда значения данных заключены в кавычки, разделители в пределах величины, рассматриваются в качестве символьных данных

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000146932.htm

1

Вы также удалите опцию DSD, в которой указано, что разделитель является запятой. В противном случае ожидаемым разделителем является пространство.

Вам не нужна тильда (~), чтобы правильно прочитать командную переменную, но вам нужно включить ее в кавычки.

DSD (разделители-чувствительные данные) указует, что, когда значение данных заключены в кавычках, разделители в пределах значений рассматриваются как символьные данные. Опция DSD изменяет, как SAS обрабатывает разделители при использовании ввода LIST и устанавливает разделитель по умолчанию в запятую. Когда вы указываете DSD, SAS обрабатывает два последовательных разделителя как отсутствующее значение и удаляет кавычки из значений символов.

Взаимодействие: Используйте параметр DELIMITER = или DLMSTR = для изменения разделителя.

Совет. Используйте параметр DSD и вход LIST для чтения символьного значения, содержащего разделитель внутри строки, заключенной в кавычки. Оператор INPUT рассматривает разделитель как допустимый символ и удаляет кавычки из символьной строки до сохранения значения. Используйте модификатор формата тильды (~), чтобы сохранить кавычки.

+0

я подумал, что это должно быть заявление, чтобы указать DLM = «», то в чем разница между DLM и DSD? – useR

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