我创建了一个生成许多sas数据集的sas代码。现在我想将它们全部附加到一个excel文件中。首先,我想将sas数据集的所有列标题转换为第一个观察。然后在这些数据集之间留出空间(添加空白观察)。我们怎么做呢?
答案 0 :(得分:4)
执行此操作的一种方法是使用dictionary.columns
proc sql;
create table Attribute as
select * from dictionary.columns;
通读表并查看您感兴趣的属性。对于您的情况,您可能对列"NAME"
< - 包含所有列的名称感兴趣。
根据列的标识(从哪个库/文件的类型/文件名称)向where
添加proc sql
语句来修改表格,例如where upcase(libname)= "WORK"
data attribute;
array column [ n ] $ length ;
do i=1 to n;
set attribute ( keep = name) ;
column [ i ] = name ;
end;
run;
然后我将继续数据步骤。您可以使用宏变量按select variable into :
存储列名称的值,但无论如何您仍然需要对数组n
的大小或任何其他将值存储到一个观察中的方法进行硬编码。还记得相应地定义数组的长度和类型。您可以在Attribute
var1-varn
语句后添加length
,为结果数据集array
中的变量命名。
为简单起见,我使用set
语句来读取观察一和一,并存储列NAME
的值,这是将dictionary.columns用于数组时派生的官方列名
请注意,创建非临时数组会创建变量。
如果要添加空白,请添加
data younameit ;
merge attribute attribute(firstobs=2 keep=name rename=(name=_name));
output;
if name ne _name then do;
call missing(of _all_);
output;
end;
run;
由于两个数据集以不同的观察开始,并且列名在一个数据集中不重复,因此{{1},有效观察的下一行(从结果数据集中的第一个output
语句派生出来将为空}}
答案 1 :(得分:1)
听起来您只想组合数据集并将结果写入Excel文件。你真的需要额外的空行吗?
libname out xlsx 'myfile.xlsx';
data out.report ;
set ds1 ds2 ...;
run;
答案 2 :(得分:0)
确保所有列都是字符(或数字,替换数字),然后在数据步骤中使用:
array names{*} _character_;
do i=1 to dim(names);
call label(names{i}, names{i});
end;
output;