Я новичок в SAS и изо всех сил пытаюсь экспортировать данные в CSV. Мой код успешно экспортирует файл, но в каждой строке, не являющейся заголовком, есть запятая, которая создает смещение.
Я чувствую, что мне не хватает чего-то очевидного, и мне действительно нужна помощь. Спасибо!
data _null_;
file "/export.csv";
set "/table" (keep= field1 field2 'field 3'n);
if _n_ = 1 then
do; /* write header row */
put "field1"
','
"field2"
','
"field3";
end;
do;
put (_all_) (',');
end;
run;
Мой вывод в конечном итоге выглядит так...
поле1, поле2, поле3,
х, у, г
, а , б , в
д, д, ф...
или
Вместо этого используйте proc export
. Это сэкономит вам много времени и усилий по сравнению с кодированием ручного экспорта .csv.
proc export
data = table(keep=field1 field2 field3)
file = '/export.csv'
dbms = csv
replace;
run;
Спасибо! Это простой способ экспорта. Я буду использовать этот метод, когда переименование столбцов не является проблемой (что не было ясно из моего сообщения).
Вы также можете переименовывать столбцы перед экспортом, используя параметры набора данных. proc export data=foo(rename=(field1=new_name1 field2=new_name2)) ...
Спасибо за продолжение! Это полезно.
Общая версия, использующая мою вторую любимую процедуру CALL.
data _null_;
file log ls=256 dsd; /*change LOG to your file*/
set sashelp.heart;
if _n_ eq 1 then link names;
put (_all_)(:);
return;
names:
length _name_ $32;
do while(1);
call vnext(_name_);
if _name_ eq '_name_' then leave;
put _name_ @;
end;
put;
return;
run;
Спасибо! проверяет имя пользователя... да, проверяет.
Поскольку вы, кажется, уже знаете имена переменных (поскольку вы жестко закодировали строку заголовка), просто измените оператор PUT, чтобы не вставлять лишнюю запятую.
put field1 (field2 'field 3'n) (',');
Но на самом деле вам следует просто сообщить SAS, что вы пишете файл с разделителями, используя опцию DSD.
/* write header row */
data _null_;
file "/export.csv";
put "field1,field2,field 3";
run;
/* Add the actual data */
data _null_;
file "/export.csv" dsd mod ;
set table;
put field1 field2 'field 3'n ;
run;
Если вы на самом деле не знаете имена переменных заранее, просто попросите SAS сгенерировать их для вас.
/* write header row */
proc transpose data=table(obs=0) out=names;
var _all_;
run;
data _null_;
file "/export.csv" dsd;
set names;
put _name_ @;
run;
/* Add the actual data */
data _null_;
file "/export.csv" dsd mod ;
set table ;
put (_all_) (+0);
run;
Спасибо за подробный ответ. Этот метод обеспечивает наибольшую гибкость для моих нужд.
Тем временем у меня был метод Magoo'd, который тоже работает, но все это хорошие ответы.
Я использовал опцию оператора файла dsd.
data _null_;
file "/export.csv"; dsd delimiter = ",";
set "/table" (keep= field1 field2 'field 3'n);
if _n_ = 1 then
do; /* write header row */
put "field1"
','
"field2"
','
"field3";
end;
do;
put (_all_) (+0);
end;
run;
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Еще один вариант, который работает при переименовании столбцов.
ods csv file='/home/fkhurshed/demo.csv';
proc print data=sashelp.class label noobs;
label age= 'Age (years)' sex = 'Sex' weight = 'Weight (lbs)' height = 'Height (inches)';
run;
ods csv close;
Проверьте опцию оператора DSD FILE.