【问题标题】:SAS group by first digitsSAS 按第一位数字分组
【发布时间】:2017-12-07 11:24:09
【问题描述】:

我在 SAS 中有一个变量,其中包含很多数字,例如 11000、30129、11111、30999。我想按前两位数字对其进行分组,因此“11000 和 11111”以及“30129 和 30999”将在一张自己的桌子。

【问题讨论】:

    标签: sas


    【解决方案1】:

    很简单,

    您必须创建第二列并提取第 2 个数字。

    然后按第二列对数据集进行排序。

    data test;
     infile datalines dsd ;
       input a : 15. ;
       datalines;
    11000,
    30129,
    11111,
    309999,
    ; 
    run;
    
    data test_a;
    length val_a $2;
    set test;
    val_a= SUBSTRN(a,1,2);
    run;
    
    proc sort data=test_a out=test_b;
    by val_a;
    run;
    

    结果将是:

    val_a     a
    11        11000
    11        11111
    30        30129
    30        309999
    

    然后您可以像这样在 val_a 上创建 2 个带有选择的数据集:

    data want data_11 data_30;
    set test_b;
    if val_a = 11 then output data_11;
    if val_a = 30 then output data_30;
    run;
    

    问候,

    【讨论】:

    • 我编辑了汤姆的答案 - val_a 需要定义为字符变量(见长度声明)
    • 感谢 Vasja 的评论。奇怪的东西,格式 val_a 15.;工作正常。我不明白为什么 val_a 需要成为角色。顺便说一句,我的答案解决了这个问题:)
    【解决方案2】:

    我想我确实喜欢你,但我的新专栏只显示“.”。不过我觉得你的回答无论如何都能给我一些帮助,谢谢!

    data books;
    
    infile "&path\Boken.csv" dlm=';' missover dsd firstobs=2;
    
    	input   ISBN: $12.
    			Book: $quote150.;
    
    
    run;
    
    data test_a;
    format val_ISBN 15.;
    set books;
    val_ISBN= SUBSTRN(ISBN,1,2);
    run;
    
    proc sort data=test_a out=test_b;
    by val_ISBN;
    run;
    
    
    proc print data=test_b (obs=10) noobs ;
    run;

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2010-10-14
    • 2022-05-22
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多