在我的组织中,数据库设置是将SQL表复制到我们的SAS服务器上。 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
那么,如何区分这两者之间的代码差异?
谢谢。
答案 0 :(得分:1)
要使用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>
第一种替换方法会增加噪音。 第二种方法会丢失一些原始查询“真味”