【问题标题】:How do I find the 4th record in SQL/ SAS PROC SQL?如何在 SQL/SAS PROC SQL 中找到第 4 条记录?
【发布时间】:2020-08-16 18:27:29
【问题描述】:

最初我尝试在此处包含一个示例 SAS 表,但我无法让脚本在应有的位置换行 - 如果您可以让我知道如何在文本编辑器中键入时手动插入换行符,我将不胜感激,谢谢

我的问题:

对于 SAS PROC SQL - 如何返回第 4 高记录(即排序后 - 就像客户/资产列表)? (即我不想要 1st、2nd 或 3rd,因此不使用 outobs=)

同样,SQL 的语法是什么(可能与 SAS PROC SQL 不同) - 我相信它可以利用 LIMIT 参数?

感谢您的帮助

【问题讨论】:

    标签: sql sas


    【解决方案1】:

    在数据步骤中,您可以使用自动_N_ 变量。对于 SQL,SAS 中有一个未记录的函数,称为 monotonic()。它为您提供记录编号。这里有几种方法可以满足您的需要:

    data blah;
    letter = "ay "; number = 2;  output;
    letter = "bea"; number = 3;  output;
    letter = "see"; number = 42; output;
    letter = "Dea"; number = 99; output;
    letter = "Eee"; number = 1;  output;
    run;
    
    
    data new;
        set blah;
        theN = _N_; * if you want to save the record number;
        if theN = 4;
    run;
    
    proc sql;
        create table new2 as
            select blah.*, monotonic() as theN
                from blah
                having (theN = 4)
            ;
    quit;
    

    如果数据未排序,您可以使用 order by 子句对其进行排序:

    proc sql;
        create table ordered as
            select * from blah order by letter;
        create table new2 as
            select ordered.*, monotonic() as theN
                from ordered
                having (theN = 4);
        drop table work.ordered;
    quit;
    

    如果数据是数字,你也可以使用 proc rank。

    data blah;
    letter = "ay "; number = 2;  output;
    letter = "bea"; number = 3;  output;
    letter = "see"; number = 42; output;
    letter = "Dea"; number = 99; output;
    letter = "Eee"; number = 1;  output;
    run;
    
    proc rank data = blah out = new3 (where = (theRank = 4));
        var number;
        ranks theRank;
    run;
    

    【讨论】:

    • 感谢您的快速回复!并特别感谢您提供数据步骤和 PROC SQL 的解决方案,非常感谢。不过,我可以问一个后续问题吗 - 现在,如果我想找到价值第四高的记录(考虑到可能包含该值的记录),最好的方法是什么?对于 PROC SQL:我可以对不同的值使用 INNER JOIN,但是在这种情况下,我只能进行升序(默认情况下),因为我不能在 [INNER JOIN DISTINCT values 语句] 中使用 ORDER BY DESC - 我正确吗?跨度>
    • @KeepWalking 你试过 PROC RANK 了吗?
    • 我更新了答案以包含对数据进行排序的代码,并在 proc rank 中添加了(谢谢@Tom)。如果你很好,请点击绿色复选标记。如果没有,请再问一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多