2016-09-15 13 views
0

У меня есть особая проблема. Я экспортировал файл csv, где мне на некоторых столбцах нужно было поместить данные в кво-знаки из-за ведущих нулей, а иногда и длинный номер данных включает в себя «E» в них при экспорте. Теперь я пытаюсь импортировать тот же файл в SAS, чтобы проверить, работает ли моя процедура импорта proc.SAS Proc Импорт csv-файла со столбцами, заключенными в кавычки

Когда я импортирую файл, все данные поступают, но сжимаются в два столбца (что неправильно с моим разделителем?), Когда я фактически экспортировал 20 столбцов.

Не все столбцы заключены в кавычки, всего лишь пару из них. Пример данных:

CustomerID CustomerName Product Price BillingNR 

""  Customer 1 Product1 Price1 "03541"  
"52465"  Customer 2 Product2 Price2 ""   
"23454"  Customer 3 Product3 Price3 "035411236952154589632154" 

CustomerID и BillingNR затем заключены в кавычки.

Как импортировать этот набор данных, когда только некоторые из столбцов заключены в кавычки, в то время как другие arent? Или просто удалить все двойные кавычки из при импорте? Heres мой код:

%macro import; 

%if &exist= "Yes" %then %do; 
    proc import 
    datafile= "\\mypath\data.csv" 
     DBMS=CSV 
     out=Sales 
     replace; 
     getnames=YES; 
    run; 
%end; 

%else %do; 
%put Nothing happens; 
%end; 


%mend; 

%lesInn; 

Параметр/ELSE-тест IF просто еще один макрос, где я проверить, существует ли файл, указанный. Я пытался исследовать разные методы, и я все еще ищу подобные проблемы, но ничего не работало.

Все ответы высоко оценены.

Toor

+0

делает CSV действительно выглядеть в вашем примере? Тогда вам нужно будет добавить 'delimiter = '|';'. Или это просто абстрактный образец? – kl78

+0

Простите только абстрактный пример. Удалены трубы из примера – Jaz

+0

В чем вопрос? Вы спрашиваете, достаточно ли PROC IMPORT, чтобы выяснить, какие столбцы являются числовыми и которые являются символами? – Tom

ответ

0

Если вы прочитали файл, используя опцию DSD, SAS автоматически удалит котировки вокруг значений. Даже кавычки, которые находятся вокруг значений, которые не нужно указывать, как и большинство ваших данных примера.

data want ; 
    infile cards dsd truncover firstobs=2; 
    length CustomerID $5 CustomerName $20 Product $20 Price $8 BillingNR $30 ; 
    input CustomerID -- BillingNR ; 
cards; 
CustomerID,CustomerName,Product,Price,BillingNR 
"",Customer 1,Product1,Price1,"03541" 
"52465",Customer 2,Product2,Price2,"" 
"23454",Customer 3,Product3,Price3,"035411236952154589632154" 
; 

будет приводить к значениям как: enter image description here

0

CSV -> Значения, разделенные запятыми Я не вижу запятые используются как ваши разделители, но трубы.

Укажите, что ваш разделитель является трубой, и увеличьте опцию GUESSINGROWS до большого количества, чтобы назначить правильную длину и тип.

Proc import ... DBMS = DLM Replace; 
Delimiter='|'; 
GuessingRows=10000; 
....remaining options; 
Run; 

Я все еще не уверен, что импорт будет работать. Если это не так, вам нужно будет написать код шага данных и не указывать опцию DSD, которая будет обрабатывать кавычки.

Редактировать: На основе редактирования вопроса наиболее точный метод заключается в чтении с помощью шага данных. Как упоминалось, опция DSD будет обрабатывать кавычки.

+0

Жаль, что пример был просто абстрактным. Я отредактировал и удалил трубы. – Jaz

+0

Теперь у меня может быть большой выбор данных, но GuessingRows не будет работать, если файл для импорта будет всего 5 или 10 строк? – Jaz

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

  • Нет связанных вопросов^_^