【问题标题】:Exporting SAS table with numeric varnames使用数字变量名导出 SAS 表
【发布时间】:2019-08-20 14:46:58
【问题描述】:

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

我已经尝试过 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 工作表上的列名是 010,020,030。有人可以帮我吗?

【问题讨论】:

  • 如果您想要 Excel 文件,为什么还要编写 HTML 文件?
  • 嗨,汤姆,我也尝试将其写为 excel 文件,但它仍然不允许我将 SAS 上的名称写成 excel 原样。
  • 您是否希望标题的单元格包含数字,但 Excel 显示样式显示前导零?或者您是否希望单元格包含字符串010 等?如果后者是可以的,如果单元格包含额外的字符,比如通常不可见的'A0'x?
  • 我希望列的 excel 表上的标题显示 010,020 而不是 10,20。所以,它是列名的前导零,我希望这些标题采用文本格式
  • Excel 正在更改格式。当您使用 PROC EXPORT 时,您是否使用了标签选项?如果没有,请尝试。

标签: excel sas header ods


【解决方案1】:

使用 ODS 样式选项 pretext= 将硬空格 'A0'x 添加到标题单元格值。硬空间将阻止 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;

【讨论】:

  • 无需添加字符。告诉它单元格是文本。 style(header)={tagattr='text'}
  • tagattr 必须是 tagattr='type:text'
  • style(header)={tagattr='text'} 就像魔术一样工作。谢谢!
【解决方案2】:

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

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;

您还可以在标题字符串中添加一些非空格、非数字字符(例如 'A0'x 或其他非打印字符),然后 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;

【讨论】:

    【解决方案3】:

    带标签的 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多