如何在SQL / SAS PROC SQL中找到第四条记录?

问题描述

最初,我尝试在此处包括一个示例SAS表,但无法使脚本在应有的位置换行-感谢您是否可以让我知道如何在输入文本编辑器时手动插入换行符,谢谢

我的问题

对于SAS PROC sql-如何返回第4个最高记录(即排序后-像清单/资产列表一样)? (即我不希望第一,第二或第三,因此不使用outobs =)

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

感谢您的帮助

解决方法

在数据步骤中,您可以使用自动_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排名。

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;