Неверные данные SAS для csv

#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. Нет. Вместо этого вашему коду пришлось бы обрабатывать строку с дополнительной логикой, такой как ввод цвета в начале строки, а затем изменение цены в обратном направлении от конца строки и предположение, что описание-это то, что осталось. Если поставщик данных не может правильно разграничить значения, вы должны согласиться с тем, что хорошая логика будет нарушена плохими данными.