Читайте в SAS с двумя концами строк и начинайте с разных позиций - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть две строки наблюдений для чтения в SAS.Это набор данных через запятую.Мой код, как показано ниже:

DATA SASweek1.industry;
  INFILE "&Dirdata.Assignment1_Q6_data.txt" DLM="," DSD termstr=crlf TRUNCOVER;
  LENGTH Company $ 15;
  INPUT Company $ State $ Expense COMMA9. ;  
  FORMAT Expense DOLLAR9.;
  *INFORMAT Expense DOLLAR10.;
RUN; * not ready;

Набор необработанных данных выглядит следующим образом:

enter image description here

Я могу распечатать первыйлиния наблюдений хорошо, но последние «0» перейдут на первую позицию второй строки, став «0Lee's ..».Любые предложения будут высоко оценены !!

1 Ответ

0 голосов
/ 13 сентября 2018

Это просто делает то, что вы сказали, чтобы сделать. Вы сказали, что читать ровно 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;
...