Это просто делает то, что вы сказали, чтобы сделать. Вы сказали, что читать ровно 9 символов.
Обычно вы не должны использовать форматированный режим ввода с данными с разделителями. Вы можете предотвратить это, либо добавив префикс :
(двоеточие) перед спецификацией informat в операторе INPUT
, либо полностью удалив спецификацию informat и используя инструкцию INFORMAT
, чтобы SAS узнала, какой информат использовать.
Но ваши данные НЕ разграничены должным образом, поскольку последнее поле содержит разделитель, но значение не заключено в кавычки. Таким образом, запятые делают его похожим на два значения вместо одного. Реальное решение состоит в том, чтобы исправить процесс, который создал файл, для создания допустимого файла с разделителями. Необходимо заключить в кавычки значения с запятыми в них, или удалить запятые из чисел, или использовать символ разделителя, который не отображается в данных.
К счастью, поскольку это последнее поле в строке, вы МОЖЕТЕ использовать форматированный ввод для чтения только этого поля. Поскольку вы используете опцию TRUNCOVER
, просто установите максимальную ширину информации в операторе INPUT.
DATA SASweek1.industry;
INFILE "&Dirdata.Assignment1_Q6_data.txt" DLM="," DSD termstr=crlf TRUNCOVER;
LENGTH Company $15 State $15 Expense 8;
INPUT Company State Expense COMMA32. ;
FORMAT Expense DOLLAR9.;
RUN;