You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS是否提供内置宏格式化自定义DI转换的输出?

在SAS DI Studio自定义转换中,是否有内置工具替代自定义格式输出宏?

在SAS Data Integration (DI) Studio开发ETL程序时,自带的每个转换都有简洁的UI,能直接设置输出数据集的列名、类型、长度和格式。但遇到现有转换满足不了需求,必须写自定义代码的时候,我们得尽量保留点选式的配置界面——毕竟后续维护人员大多不会深入底层SAS代码,修改列或格式时,他们更希望直接通过UI配置完成,而且这样还能支持影响分析与反向影响分析。

我之前为了实现这个需求,会用SAS暴露的输出结构宏变量写一个自定义宏,像这样:

%macro format_output(data); 
%do _col = 0 %to &&&data._col_count - 1; 
length &&&data._col&_col._name &&&data._col&_col._type&&&data._col&_col._length; 
%if %length(&&&data._col&_col._format) %then %do; 
format &&&data._col&_col._name &&&data._col&_col._format; 
%end; 
%end; 
%mend; 

data &_OUTPUT1 (keep=&_OUTPUT1_keep); 
%format_output(_OUTPUT1); 
set &_INPUT1; 
* actual code ; 
run;

现在想问问:SAS有没有提供内置宏或类似工具,能实现和这个自定义宏一样的功能?

补充说明:SAS是通过这类宏变量来披露输出结构的:

%let _OUTPUT1 = myLib.myTable; 
%let _OUTPUT1_connect = ; 
%let _OUTPUT1_engine = ; 
%let _OUTPUT1_memtype = DATA; 
%let _OUTPUT1_opt...

好问题!其实SAS确实有内置的解决方案来做这件事,不用自己写宏——就是**%DSTOOLS_FORMAT_OUTPUT**宏,它是SAS DI Studio自带的工具宏,专门用来处理这种从DI配置的元数据生成输出列结构的需求。

这个宏会自动读取DI Studio暴露的那些输出数据集相关的宏变量(比如你提到的&_OUTPUT1_col_count、&_OUTPUT1_colX_name这类),自动生成对应的length和format语句,完全替代你自定义的%format_output宏的功能。

用法也很简单,直接在你的data步里调用就行,比如把你的代码改成:

data &_OUTPUT1 (keep=&_OUTPUT1_keep); 
%DSTOOLS_FORMAT_OUTPUT(_OUTPUT1); 
set &_INPUT1; 
* actual code ; 
run;

另外,还有个小细节:如果你的自定义转换涉及多个输出数据集,这个宏也能处理,只要把对应的输出标识(比如_OUTPUT2)传给它就行。

这个宏的优势在于它是SAS官方维护的,会随着DI Studio的版本更新而适配,比自己写的宏更稳定,而且完全兼容DI的影响分析功能——维护人员通过UI修改列配置后,宏会自动读取更新后的元数据变量,不用手动调整代码。

对了,还有个相关的宏**%DSTOOLS_ATTRIB_OUTPUT**,它会生成attrib语句来定义列的属性,效果和你写的length加format类似,你也可以根据需求选择使用。


内容的提问来源于stack exchange,提问作者Dirk Horsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:50:21