动态计算SAS表中的列数

时间:2014-09-29 04:48:19

标签: sas

我需要创建一个页脚记录,显示与表格中的列数相等的分号。该表有47列,但这可能会更改,所以我需要动态计算列而不使用字典表。页脚记录将导出到csv文件,它的分隔符是分号。

我在下面尝试了这个代码,它可以工作,但是当将数据导出到csv文件时,即使我使用了dequote函数,分号也用双引号括起来。有什么想法删除它们吗?提前谢谢。

proc contents data=input out=output noprint; run;
proc sort data=output; by varnum; run; 
  data _null_; 
    set output;
    call symputx("maximum",varnum);
  run;
  data semis; 
    length ffsemis $47; 
    ffsemis = repeat(';',&maximum*1);
*   call symputx("semis",ffsemis); 
  run;
  data _null_;
    file "E:\semis.csv" delimiter=';' dsd dropover;
    set work.semis;
    if _n_=1 then do;
    put ffsemis;
  end;
  run;

1 个答案:

答案 0 :(得分:0)

我能想到的确定SAS数据集中变量数量的最简单方法是使用proc内容。

使用数据内容创建新数据集并运行空数据步骤以将最大变量数保存到宏变量。请注意,宏变量将保存为字符值,因此您必须确保通过对值执行数值运算将其转换回数字,以便将新的宏变量用作代码中的数字。

proc contents data=input out=output; run;

proc sort data=output; by varnum; run;

data _null_; 
    set output;
    call symputx("maximum",varnum);
run;

data semis; 
    length ffsemis $27; 
    ffsemis = repeat(%str(;),&maximum*1);
    call symputx("semis",ffsemis); 
run;

%put SEMIS = "&semis.";

proc export data=semis file="C:\semis.csv";
run;