#variables #sas #naming
#переменные #sas #именование
Вопрос:
Настройка базы данных в моей организации — это таблицы 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
Итак, как мне определить разницу в коде между этими двумя?
Заранее спасибо.
Комментарии:
1. Это помогло бы показать, что на самом деле происходит в данный момент. Насколько я знаю, набор данных SAS не может содержать две переменные с одинаковыми именами, поэтому я предполагаю, что вы не смогли создать такой набор данных. Вы получаете ошибки при попытке? Если у вас есть два отдельных набора данных с этими переменными в них, вы можете использовать оператор ПЕРЕИМЕНОВАНИЯ (или параметр ПЕРЕИМЕНОВАТЬ набор данных), чтобы переименовать один или оба из них.
2. Как вы подключаетесь к базе данных SQL Server? Используете ли вы инструкцию LIBNAME и позволяете ли SAS автоматически преобразовывать ваш код SAS в код SQL Server для запроса базы данных? Или вы используете сквозные SQL-запросы для запуска кода SQL Server непосредственно в базе данных?
3. Вы пробовали 40 ударов мокрой лапшой по разработчику этой базы данных?
4. У вас могут быть идентичные столбцы в случае представления. Вы увидите ПРЕДУПРЕЖДЕНИЕ, когда представление будет реализовано, и другие столбцы с одинаковыми именами будут удалены. Также возможны
...Portfoli
и...Portfol1
, которые выглядят одинаковоI
для1
5. Привет, я пока склоняюсь ко второму варианту Тома, хотя сомневаюсь, что wet — лучший вариант? Технические вопросы: Таблицы данных автоматически настраиваются нашим администратором SAS, поэтому они существуют в той или иной форме на сервере SAS, и когда мы открываем Enterprise Guide и переходим к Open> Data, вложенные библиотеки находятся в папке SASApp Library, имя libname не требуется. Когда я нажимаю на свойства библиотеки, указывается следующее: Движок: ODBC, Параметры: schema =’dbo’ ACCESS =DATASRC ТОЛЬКО ДЛЯ ЧТЕНИЯ = LIVE_REP Я думаю, что таблица представляет собой представление SQL.
Ответ №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="amp;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>
Первый способ замены добавляет шума. Второй способ приводит к потере части «истинного вкуса» исходных запросов