Переменная names в хэше может содержать любой символ, только если сеанс SAS включен
option validvarname = any;
Этот параметр может быть установлен, если вы импортируете данные Excel или имеетеисточник данных, столбцы которого не соответствуют стандартным соглашениям о присвоении имен - начинайте с _ или буквы, после чего следует любое число _, буква или цифра.
При ссылке на столбец с необычным именем в коде шага DATA у вас будетиспользовать синтаксис имени-литерала SAS (в кавычках следует N), однако при передаче имени столбца хеш-конструкторам (в виде строки) вы будете использовать имя, а не имя-литерал:
"<column-name>"N
Пример кода:
options validvarname = any;
data have;
"my key name is spacey"N = "key-1"; **** name-literal syntax used here;
x = 123;
run;
data _null_;
if 0 then set have; * prep pdv;
if _n_ = 1 then do;
declare hash h(dataset:'have');
h.defineKey("my key name is spacey"); **** name with spaces passed here;
h.defineData("x");
h.defineDone();
end;
'my key name is spacey'N = "key-0"; **** name-literal used here;
rc = h.find();
put rc= x=;
'my key name is spacey'N = "key-1"; **** name-literal used here;
rc = h.find();
put rc= x=;
run;
Что касается объединения.
- УСТАНОВИТЬ удаленную таблицу
- Применить
where
к удаленной таблице.Ядро базы данных SQLSRV передает критерии в SQL и применяет их перед отправкой данных по «проводу» обратно на шаг DATA. - Если имя ключевой переменной совпадает в таблице x и в таблицепоиск, вы можете использовать более простой
hash.find()
.hash.find(key:<expression>)
требуется только тогда, когда имена не совпадают, или ключ в одном домене должен быть преобразован до того, как он станет подходящим поиском (например, поиск совпадения при входе в систему по паролю будет работать только после того, как введенный текст будет хеширован, а затем сравненосвоить таблицу логина)