Экспорт SAS CSV содержит нежелательную начальную запятую в каждой строке

Я новичок в 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,

Х, у, г

, а , б , в

Д, д, ф...

Или

Поле1 Поле2 Поле3 Икс у г а б с г е ф

Проверьте опцию оператора DSD FILE.

data _null_ 15.02.2023 22:06
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
2
1
50
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вместо этого используйте proc export. Это сэкономит вам много времени и усилий по сравнению с кодированием ручного экспорта .csv.

proc export 
    data = table(keep=field1 field2 field3)
    file = '/export.csv'
    dbms = csv
    replace;
run;

Спасибо! Это простой способ экспорта. Я буду использовать этот метод, когда переименование столбцов не является проблемой (что не было ясно из моего сообщения).

user3525534 16.02.2023 00:03

Вы также можете переименовывать столбцы перед экспортом, используя параметры набора данных. proc export data=foo(rename=(field1=new_name1 field2=new_name2)) ...

Stu Sztukowski 16.02.2023 01:04

Спасибо за продолжение! Это полезно.

user3525534 16.02.2023 01:53

Общая версия, использующая мою вторую любимую процедуру 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;

Спасибо! проверяет имя пользователя... да, проверяет.

user3525534 16.02.2023 00:05
Ответ принят как подходящий

Поскольку вы, кажется, уже знаете имена переменных (поскольку вы жестко закодировали строку заголовка), просто измените оператор 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;

Спасибо за подробный ответ. Этот метод обеспечивает наибольшую гибкость для моих нужд.

user3525534 16.02.2023 00:04

Тем временем у меня был метод 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;

Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.

Community 22.02.2023 04:28

Еще один вариант, который работает при переименовании столбцов.

  • CSV-файл ODS
  • LABELS для печати меток вместо имен переменных, что позволяет переименовывать. Также поддерживает изменение/применение форматов при экспорте.
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; 

Другие вопросы по теме