【问题标题】:SAS: PROC RANK: Use operators on variablesSAS:PROC RANK:对变量使用运算符
【发布时间】:2013-08-18 03:32:28
【问题描述】:

我在下面有一些数据(使用代码创建)根据两个变量对观察结果进行排名。在这种情况下,它对玩家的第一次下注和第二次下注进行排名,并创建两个“排名”变量。相反,我想做的是根据两个变量的函数(如两个变量的平均值)对观察结果进行排名,我想在 PROC RANK 命令本身中执行此操作,而不是使用初步数据步骤作为在我在我需要的所有变量上复制这个之后,排名将得到公平的参与。我可以将运算符放入 PROC RANK 语句中吗?而不是这样做:

    Proc rank data=want ties=mean out=ranked groups=2;
         var bet1stake bet2stake;
         ranks bet1stakeRank bet2stakeRank;
    run;

我想这样做:

    Proc rank data=want ties=mean out=ranked groups=2;
         var avg(bet1stake, bet2stake);
         ranks firstTwoBetsRank;
    run;

这可能吗?

这就是创建完整示例数据的方式。

    data have;
       input username $  betdate : datetime. stake winnings;
       dateOnly = datepart(betdate) ;
       format betdate DATETIME.;
       format dateOnly ddmmyy8.;
       datalines; 
        player1 12NOV2008:12:04:01 90 -90 
        player1 04NOV2008:09:03:44 100 40 
        player2 07NOV2008:14:03:33 120 -120 
        player1 05NOV2008:09:00:00 50 15 
        player1 05NOV2008:09:05:00 30 5 
        player1 05NOV2008:09:00:05 20 10 
        player2 09NOV2008:10:05:10 10 -10 
        player2 15NOV2008:15:05:33 35 -35 
        player1 15NOV2008:15:05:33 35 15 
        player1 15NOV2008:15:05:33 35 15 
    run;

    proc sort data=have;
       by username betdate;
    run;

    data have;
    set have;
       by username betdate;   
       retain eventTime;
       if first.username then eventTime = 0;
       if first.betdate then eventTime + 1;
       run;

    proc sql;
    create table want as 
    select 
            distinct username,
            (select distinct stake from have where username = main.username and eventTime = 1) as bet1Stake,
            (select distinct stake from have where username = main.username and eventTime = 2) as bet2Stake
        from have main;
    quit;

    Proc rank data=want ties=mean out=want groups=2;
         var bet1stake bet2stake;
         ranks bet1stakeRank bet2stakeRank;
    run;

感谢您对此的任何帮助。

【问题讨论】:

    标签: sas


    【解决方案1】:

    恐怕您无法将运算符应用于您想要对观察结果进行排名的变量。 您的选择是使用DATA 步骤来执行运算符的应用和排名的计算

    或者 如果您担心磁盘空间,请使用Data step viewSQL view 应用运算符作为中间步骤。

    如果您从 SQL 数据库中提取数据(假设它支持窗口函数),您应该只使用一些传递到数据库的 SQL 代码来完成您想要做的事情。

    【讨论】:

    • 我将尝试使用数据步骤视图来执行此操作,所以。是不是就像一个表格(但不是真正存储为表格)?
    • 是的,数据步骤视图的使用方式与表格几乎相同。
    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多