увеличить ограничение имени столбца при импорте dbfs из папки - PullRequest
0 голосов
/ 13 марта 2019

Я использую SAS 9.4

Я написал макрос для чтения всех .dbf файлов из заданной библиотеки ( производное библиотека, которую я указал), но она последовательно усекает имена моих столбцов до 10 символов.

Существует ли простой способ увеличить ограничение на количество символов в имени столбца?

В идеале я хотел бы, чтобы имена столбцов были длиной до 30 символов.

Надеюсь, здесь достаточно информации, дайте мне знать, если вам понадобится больше от меня по этому вопросу.Довольно новый для SAS .

макрос:

%macro readindbf; 

   filename DIRLIST pipe "dir &rawdata.\*.dbf /b ";
   data dirlist;
     infile dirlist lrecl=200 truncover;
     input file_name $100.;
     run;
   data _null_;
     set dirlist end=end;
     count+1;
     call symputx('readdbf'||put(count, 4.-l), cats("&rawdata.\", file_name));
     call symputx('dsetdbf'||put(count, 4.-l), scan(file_name, 1, '.'));
     if end then call symputx('max', count);
     run;

   %do i=1 %to &max;
     proc import datafile="&&readdbf&i"
       out=derived.&&dsetdbf&i 
       dbms=dbf
       replace;
       run;
   %end;

%mend readindbf;

edit:

У меня естьпопытался установить: option validvarname = ANY в моем файле autoexec, который согласно здесь должен разрешать имена длиной до 32 байтов, но он все еще усекает мои имена.

1 Ответ

1 голос
/ 13 марта 2019

Имена полей не усекаются. 10-символьное имя поля является ограничением формата файла .dbf.

Из справки SAS (мой жирный):

Примечание: Имя поля базы данных может содержать не более 10 символов . По этой причине имена переменных SAS усекаются до 10 символов, когда они экспортируются в dBASE.

С Структура файла DBF :

Field Subrecords Structure

Byte offset   Description
0 - 10        Field name with a maximum of 10 characters.
              If less than 10, it is padded with null characters (0x00).
11            Field type: 
              C   -   Character
              Y   -   Currency
              N   -   Numeric
…

Что касается

Есть ли простой способ увеличить ограничение на количество символов в имени столбца?

Нет. Тем не менее, вы можете переименовать столбцы после импорта их

proc datasets nolist lib=work;
  modify derived...;
  rename 
    <dbf-field-name> = <sas-variable-name>
    <dbf-field-name> = <sas-variable-name>
    … 
  ;
run;
...