#sas
Вопрос:
Я совсем новичок в SAS, и после многих попыток мне все еще интересно, как точно импортировать мой csv-файл в SAS.
Вот мои данные
color, Description, price
"Black, blue, grey", "Pipe, 16" inch wide, PVC", 20.27
Вот мой код sas
PROC IMPORT datafile='/home/..data.csv'
out=data dbms=csv replace;
getnames=yes;
guessingrows = max;
RUN;
Вот что читает SAS:
Color Description Price
Black, blue, grey "Pipe .
Я подозреваю, что SAS рассматривает «Трубу под описанием вместо трубы шириной 16 дюймов, ПВХ. Что я мог сделать, чтобы SAS мог прочитать всю строку целиком?
Комментарии:
1. я также попытался использовать ДАННЫЕ …; ФОРМАТ ..; ЗАПУСК;, но ему не удалось сгенерировать вывод, так как в нем говорится, что тип данных для цены недействителен, я думаю, это та же проблема, что и выше. Я ценю любое руководство. Спасибо
2. Сообщение на communities.sas.com для более быстрого ответа на этот вопрос.
3. У вас есть непревзойденная кавычка. «Труба шириной 16 дюймов, ПВХ» не может быть проанализирована, как ожидалось. Будут созданы новые колонки для
16" inch wide
и.PVC"
Если вы откроете его в Excel, вы увидите, как он также добавляет новые столбцы. Вы можете решить эту проблему с помощью грубой силы, добавив дополнительные временные столбцы и создав кучу правил для учета этих вещей, но лучшим решением будет получить файл в другом формате с разделителями, например в виде вкладки или канала.4. Кто создал этот файл? Можете ли вы попросить их создать версию, которую можно проанализировать?
5. Спасибо. @tom на самом деле это набор данных, отправленный мне, и я должен свериться с ними
Ответ №1:
Данные csv недопустимы.
«Желаемое» значение в двойных кавычках Pipe, 16" inch wide, PVC
содержит как двойную кавычку ( "
), так и разделитель значений ( ,
). Некоторые читатели CSV будут правильно анализировать, если 16"
у них есть экранированный "
as 16""
. Однако ИМПОРТ SAS, по-видимому, не относится к их числу.
Можете ли вы получить данные с помощью альтернативного разделителя полей, такого как |
или ~
?
Комментарии:
1. просто любопытно, поможет ли «Цвет FOMAT$:17. описание$:25. цена$:5.;»?
2. Для произвольных значений данных вы можете запросить данные в фиксированном расположении полей, чтобы точно знать, какие столбцы принадлежат какой переменной. Если вы можете получить данные с двумя пробелами между полями, и ни одно поле не содержит двух пробелов
amp;
, функция ввода списка может сработать. Прочитайте документы дляINPUT Statement, List
3. Спасибо тебе, Ричард. Просто любопытно, есть ли способы решить эту проблему только в рамках SAS? Возможно ли использовать шаг данных и заменить » другим значением, таким как*, а затем снова прочитать файл sas?
4. Нет. Вместо этого вашему коду пришлось бы обрабатывать строку с дополнительной логикой, такой как ввод цвета в начале строки, а затем изменение цены в обратном направлении от конца строки и предположение, что описание-это то, что осталось. Если поставщик данных не может правильно разграничить значения, вы должны согласиться с тем, что хорошая логика будет нарушена плохими данными.