我组织的数据库设置是复制到SAS服务器上的SQL表。 SQL表设置为运行预编程的SQL查询,现在SAS是使用的工具。但是,这会产生一些问题,某些表的变量对于SAS来说太长,但在SQL中工作。源变量的标签是正确的而不是缩短的。
The source table (in SQL Server) names:
Consolidated_Arrears_Vs_Portfolio_Balance_Ltd
Consolidated_Arrears_Vs_Portfolio_Balance_Pure
In SAS:
Consolidated_Arrears_Vs_Portfoli
Consolidated_Arrears_Vs_Portfoli
SAS Labels:
Consolidated_Arrears_Vs_Portfolio_Balance_Ltd
Consolidated_Arrears_Vs_Portfolio_Balance_Pure
那么,我如何区分这两者之间的代码差异呢?
提前致谢。
要在SAS中将数据用作本机,一种方法是编写宏以将原始SQL名称(每个标签)映射到相应的新SAS名称。如果原始表名称也被破坏了,那么你会遇到很多问题。
原始SQL
select Abracadabra_Magical_Unity_Formation_SequenceId from AMUF_Master
用。。。来代替
select %nameFor(Abracadabra_Magical_Unity_Formation_SequenceId) from AMUF_Master
宏%nameFor
要么对库中的表进行动态查找,要么更好,当静态表设计时,从一次查找创建一个固定的映射表
* presume SQL data now in libref MIGRATED;
* do once to get the variable metadata that includes LABEL and NAME;
proc sql;
create table static.nameFor as
select * from sashelp.vcolumn
where libnames = 'MIGRATED';
* use as needed;
%macro nameFor(SQL_Name);
%sysfunc(dosubl(select NAME from static.nameFor where LABEL="&SQL_Name"))
%mend;
您还可以使用static.nameFor
来发现迁移期间已更改的所有SQL名称。那些将是where name ne label
。
一种自动化方法是创建一个搜索和替换程序,该程序可以手动更改原始SQL查询的副本。
搜索和替换也是
<long-named column>
,替换为%nameFor(<long-named column>)
,或<long-named column>
,替换为<migrated to SAS column name>
第一种替代方式会增加噪音。第二种方式失去了一些原始查询的“真实味道”