如何处理源数据库中具有相同名称的字段,仅通过标签名称区分?

问题描述 投票:0回答:1

我组织的数据库设置是复制到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

那么,我如何区分这两者之间的代码差异呢?

提前致谢。

variables sas naming
1个回答
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>

第一种替代方式会增加噪音。第二种方式失去了一些原始查询的“真实味道”

© www.soinside.com 2019 - 2024. All rights reserved.