【发布时间】:2019-09-04 18:01:42
【问题描述】:
需要您的帮助和指导。请看下文
*rsubmit;proc sql;
connect to teradata(user=&user_id. password=&user_pwd.);
create table mylib.DWH_table as select * from connection to teradata(
select distinct nm from DWH_table
);
quit;*endrsubmit;
*rsubmit;
DATA mylib.out_sas1;
set mylib.DWH_table;
if prxmatch ("m/studio/i",nm) > 0;
run;*endrsubmit;
所以上面的代码在 nm 列中检查单词“studio”并返回结果。但是,这是一个需要自动化的手动过程。我有另一个数据集,其中只包含一个名为“KEYWORDS”的列。我在下面给出的一些示例数据
KEYWORDS:
apple
mango
banana
grapes
目标是 SAS 应该获取列中的单词并将其与数据库中的值进行比较,并创建一个单独的输出表。 比如:
*rsubmit;
DATA mylib.out_sas2;
set mylib.DWH_table;
if prxmatch ("m/apple/i",nm) > 0;
run;*endrsubmit;
*rsubmit;
DATA mylib.out_sas3;
set mylib.DWH_table;
if prxmatch ("m/mango/i",nm) > 0;
run;*endrsubmit;
这可以在 SAS 中完成吗?
【问题讨论】:
-
您确定要每个关键字一张表吗?每个关键字使用二进制变量可能会更好,并使用列
nm、apple、mango、banana、grapes或列nm、@ 获得输出987654330@、match2、match3、match4其中 # 对应于 KEYWORDS 中的行(因此是关键短语)。此外,根据数据,最好有一种分类形式的输出只记录匹配nm、keyword。nm值将出现在它匹配的每个关键字的输出中。 -
对 Teradata 资源的最有效使用可能是上传关键字列表并使用 INSTR、POSITION 或 INDEX 将 DWH_table 传递到关键字。例如:
on 0 < POSITION (lower(Keywords.Keyword) in lower(DWH_Table.nm)) -
@Richard 关键字在 SAS 数据集 (mylib.nouns) 中。该数据集中的单词需要与包含 2600 万行的 DWH 表(导入 SAS)进行匹配。 PRXMATCH 函数占用了太多时间。您对如何实现 INDEX 部分有任何想法吗?
-
有多少关键字(mylib.nouns 中的行数)?你对比赛的数量有一个估计吗?
nm列的宽度是多少? (即它是 VARCHAR(###) )