Я помогаю коллеге, которого попросили сгенерировать идентификатор ключа для двух разных групп входящих данных. Я выполнил этот шаг, но он не очень удобен для пользователя, поэтому я ищу предложения о том, как сделать это более читабельно. Каждая группа имеет свой собственный идентификатор, который представляется шестнадцатеричным значением. Их объединение представляется уникальным ключом само по себе.
В этом случае таблица Домохозяйства и таблица Счета объединяются, и ее попросили сгенерировать по значению Счета домохозяйства (домохозяйство может иметь много счетов, счет может охватывать домохозяйства).
Наши данные хранятся на сервере SQL, но большинство наших манипуляций мы выполняем с использованием SAS, следовательно, PROC SQL ниже.
Моя первоначальная мысль заключалась в том, что наиболее очевидным ключом является совместное использование двух ключевых полей и использование разделителя. Вы увидите это в верхней части моего кода. Однако это делает поле очень длинным, поэтому меня попросили сократить его. Моей второй мыслью и их первоначальным вопросом было просто заполнить целочисленное поле. Вы можете видеть это с Monotonic, но они чувствовали, что, так как в Интернете есть предупреждения об этом, они не доверяют этому. Моя третья мысль состояла в том, чтобы пропустить существующее сцепленное поле через какую-то одностороннюю функцию, но когда я это делаю (см. MD5 ниже), я получаю нечто, похожее на крылышки.
/* creating a table of just the "key" columns */
PROC SQL;
CREATE TABLE work.ConcatonatedKey AS
SELECT DISTINCT
CATX("G", HouseholdKey,FinancialKey) as Concatonated
FROM work.OriginalData
;
QUIT;
/* Populate HHFinancialKey */
/* Monotonic documentation */
/* http://support.sas.com/techsup/notes/v8/15/138.html */
PROC SQL;
CREATE TABLE work.ContrivedKeys AS
SELECT
Monotonic() AS HHFinID
, Concatonated
, MD5(Concatonated) As foo
FROM work.ConcatonatedKey
;
QUIT;
Итак, настоящий вопрос здесь заключается в том, что если у вас есть что-то, что может однозначно идентифицировать строку, но вы хотите сделать ее более удобной для пользователя, используя SAS, как бы вы поступили?