有没有办法从此 SAS SQL 查询中获取不区分大小写的不同行?...

SELECT DISTINCT country FROM companies;

理想的解决方案将由单个查询组成。

结果现在看起来像:

Australia
australia
AUSTRALIA
Hong Kong
HONG KONG

...其中确实需要 2 个不同行中的任何一个

人们可以将数据大写,但这会不必要地以不适合此查询目的的方式更改值。

有帮助吗?

解决方案

如果你有一些主要的INT键(姑且称之为ID),你可以使用:

SELECT country FROM companies
WHERE id =
(
    SELECT Min(id) FROM companies
    GROUP BY Upper(country)
)

其他提示

规范化大小写似乎确实是明智的——如果“澳大利亚”、“澳大利亚”和“澳大利亚”都出现,那么您希望这三个中的哪一个作为您的查询的“区分大小写的唯一”答案?如果您热衷于某些特定的启发式方法(例如计算它们出现的次数并选择最受欢迎的),这当然可以完成,但可能会需要大量的额外工作 - 那么,这种挑剔对您来说值多少钱?

一个非SQL方法(实际上只单一步骤作为数据步骤只是创建一个视图)将是:


data companies_v /view=companies_v;
  set companies (keep=country);
  _upcase_country = upcase(country);
run;

proc sort data=companies_v out=companies_distinct_countries (drop=_upcase_country) nodupkey noequals;
  by _upcase_country;
run;

也许我失去了一些东西,但为什么不干脆:

data testZ;
    input Name $;
    cards4;
Bob
Zach
Tim
Eric
Frank
ZacH
BoB
eric
;;;;
run;

proc sql;
    create view distinctNames as
    select distinct Upper(Name) from testz;
quit;

此产生仅具有不同的名称作为行的值的图。

我沿着相同的路线思想为扎克,但想到我会看问题更复杂的例子,

proc sql;
    CREATE TABLE contacts (
        line1 CHAR(30), line2 CHAR(30), pcode CHAR(4)
    );
    * Different versions of the same address - L23 Bass Plaza 2199;
    INSERT INTO contacts values('LEVEL 23 bass', 'plaza'  '2199');
    INSERT INTO contacts values('level 23 bass ', ' PLAZA'  '2199');

    INSERT INTO contacts values('Level 23', 'bass plaza'  '2199');
    INSERT INTO contacts values('level 23', 'BASS plaza'  '2199');

    *full address in line 1;
    INSERT INTO contacts values('Level 23 bass plaza', ''  '2199');
    INSERT INTO contacts values(' Level 23 BASS plaza  ', ''  '2199');

;quit;

现在我们可以输出结果 一世。从每个类别?即三个地址?点击点击 II。或者只是一个地址?如果是哪个版本,我们更喜欢哪个?

实施壳体1可以简单为:

proc sql;
    SELECT DISTINCT UPCASE(trim(line1)), UPCASE(trim(line2)), pcode 
    FROM contacts 
;quit;

实施壳体2可以简单为:

proc sql;
    SELECT DISTINCT UPCASE( trim(line1) || ' ' || trim(line2) ) , pcode 
    FROM contacts 
;quit;

从SAS 9:

PROC排序数据= input_ds sortseq =语言(车力量=主);

  by sort_vars;

运行;

我觉得正则表达式可以帮你出你想要在你的搜索字符串的模式。

有关的正则表达式可以定义一个UDF可以看到教程来制备。 www.sqlteam.com/article/regular-expressions-in-t-sql

感谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top