使用数字变量名导出 SAS table

Exporting SAS table with numeric varnames

我正在尝试导出一个 sas 数据集,它有像索引这样的数字列名(例如,010,020,030)。当我打印这个数据集时,结果选项卡以相同的格式显示它们。当我使用 ODS/proc export 导出文件时,excel 自动将列名更改为 10、20、30 等。有没有办法将列 headers 维护为文本。

我试过 ODS HTML 和 proc 导出。我还尝试将数据集导出为 xml 并尝试在 excel 中打开它。但是 Excel 会自动将其更改为数字。

data check;
'010'n=200;
'020'n=500;
'030'n=1000;
run;

options missing=0;
ODS HTML FILE="&output_loc./check.xls";
Title "check col names";
proc print data=check noobs style={textalign=left};run;
Title;
ODS HTML CLOSE;
options missing=.;

我希望 excel sheet 上的列名称为 010,020,030。有人可以帮我解决这个问题吗?

一种方法是生成 CSV,然后使用 Excel 的 "DATA" 菜单中的 "From Text/CSV" 选项打开 CSV 文件。您将必须编辑它对文件所做的转换,以防止 Excel 将 header 行转换为数字。当我用一个简单的例子尝试它时,我不得不手动告诉它我有 header 行,然后删除它所做的将 header 行更改为数字的类型转换。然后我不得不添加回转换以将实际值从文本转换为数字。

data check;
  x1=200;
  x2=500;
  x3=1000;
  label x1='010' x2='020' x3='030';
run;

ods csv file='c:\downloads\check.csv';
proc print noobs label data=check;
run;
ods csv close;

您还可以在 header 字符串中添加一些 non-space、non-digit 字符(例如 'A0'x 或其他 non-printing 字符),然后 Excel 不会将它们转换成数字。在这种情况下,您可以使用 ODS EXCEL 作为输出并直接写入 XLSX 文件。

data check;
  x1=200;
  x2=500;
  x3=1000;
  * Last character in labels is 'A0'x ;
  label x1='010 ' x2='020 ' x3='030 ';
run;

ods excel file='c:\downloads\check.xlsx';
proc print noobs label data=check;
run;
ods excel close;

使用 ODS 样式选项 pretext= 将 hard-space 'A0'x 添加到 header 单元格值之前。 hard-space 将阻止 Excel 将数字字符串值解释为一般数字。

您也可以(根据@Tom)使用 ODS 样式选项 tagattr='type:text'。有关更多标签信息,请参阅 Insights from a SAS Technical Support Guy: A Deep Dive into the SAS® ODS Excel Destination Chevell Parker, SAS Institute Inc.。

options validvarname=any;

data have;
'010'n=200;
'020'n=500;
'030'n=1000;
run;

ods _all_ close;

ods excel file='c:\temp\number-name-games.xlsx';

proc print data=have 
  style(header)=[pretext="A0"x]
/*
  style(header)=[tagattr='type:text']
*/
;
run;

ods excel close;

带标签的 Proc 导出对我有用 - SAS 9.4 TS1M5

    data have;
    set sashelp.class;

    label age = '010';
    label sex = '021';
    label name = '030';
    label weight = '000';
    label height = '245';

    run;

    proc export data=have outfile='/home/fkhurshed/Demo1/delete1.xlsx' dbms=xlsx label; run;