在 SAS 的 lookup table 中查找缺失值
Look up missing values in lookup table in SAS
我有一个 table 看起来像这样
(MAIN TABLE)
====================================================================================
|| TRANSACTION_ID || TRADE_PARTY_PREFIX || TRADE_PARTY_VALUE || TRADE_PARTY_TYPE
====================================================================================
| 1 | EXAMPLE | 123456789 | Dealer
--------------------------------------------------------------------------------
| 2 | EXAMPLE | 123456789 |
--------------------------------------------------------------------------------
| 3 | EXAMPLE_2 | 123456789 | Non-Dealer
--------------------------------------------------------------------------------
| 4 | EXAMPLE | 987654321 |
我还有一个 table 看起来像这样
(LOOKUP TABLE)
=================================================================
|| TRADE_PARTY_PREFIX || TRADE_PARTY_VALUE || TRADE_PARTY_TYPE ||
=================================================================
| EXAMPLE | 123456789 | Dealer
-----------------------------------------------------------------
| EXAMPLE | 987654321 | Dealer
我想要一个 SAS 脚本,通过查找 table 中的 TRADE_PARTY_PREFIX
和 TRADE_PARTY_VALUE
来替换 TRADE_PARTY_TYPE
中所有缺失的值(但是如果该列已填满,则不应触及该行。
类似于(伪代码):
for row in main_table:
if row["trade_party_type"] is not null:
print(row)
else
row["trade_party_type"] == lookup_table["trade_party_prefix"]["trade_party_value"]
不确定如何在 SAS 中执行此操作。
我会在 PROC SQL
步骤中使用 coalesce
函数,如下所示:
PROC SQL;
CREATE TABLE WANT AS
SELECT a.transaction_id, a.trade_party_prefix, a.trade_party_value, coalesce(a.trade_party_type,b.trade_party_type) AS trade_party_type
FROM dset1 a LEFT JOIN dset2 b
ON a.trade_party_prefix = b.trade_party_prefix AND a.trade_party_value = b.trade_party_value;
QUIT;
coalesce 函数按顺序计算参数,returns 最初不计算为 NULL 的第一个表达式的当前值。
我有一个 table 看起来像这样
(MAIN TABLE)
====================================================================================
|| TRANSACTION_ID || TRADE_PARTY_PREFIX || TRADE_PARTY_VALUE || TRADE_PARTY_TYPE
====================================================================================
| 1 | EXAMPLE | 123456789 | Dealer
--------------------------------------------------------------------------------
| 2 | EXAMPLE | 123456789 |
--------------------------------------------------------------------------------
| 3 | EXAMPLE_2 | 123456789 | Non-Dealer
--------------------------------------------------------------------------------
| 4 | EXAMPLE | 987654321 |
我还有一个 table 看起来像这样
(LOOKUP TABLE)
=================================================================
|| TRADE_PARTY_PREFIX || TRADE_PARTY_VALUE || TRADE_PARTY_TYPE ||
=================================================================
| EXAMPLE | 123456789 | Dealer
-----------------------------------------------------------------
| EXAMPLE | 987654321 | Dealer
我想要一个 SAS 脚本,通过查找 table 中的 TRADE_PARTY_PREFIX
和 TRADE_PARTY_VALUE
来替换 TRADE_PARTY_TYPE
中所有缺失的值(但是如果该列已填满,则不应触及该行。
类似于(伪代码):
for row in main_table:
if row["trade_party_type"] is not null:
print(row)
else
row["trade_party_type"] == lookup_table["trade_party_prefix"]["trade_party_value"]
不确定如何在 SAS 中执行此操作。
我会在 PROC SQL
步骤中使用 coalesce
函数,如下所示:
PROC SQL;
CREATE TABLE WANT AS
SELECT a.transaction_id, a.trade_party_prefix, a.trade_party_value, coalesce(a.trade_party_type,b.trade_party_type) AS trade_party_type
FROM dset1 a LEFT JOIN dset2 b
ON a.trade_party_prefix = b.trade_party_prefix AND a.trade_party_value = b.trade_party_value;
QUIT;
coalesce 函数按顺序计算参数,returns 最初不计算为 NULL 的第一个表达式的当前值。