【问题标题】:How to create a custom sas dataset如何创建自定义 sas 数据集
【发布时间】:2017-11-07 06:49:50
【问题描述】:
proc sql;
 select *
 INTO: SAGIA
 From Sasoprsk.Cust_field_value, Sasoprsk.Cust_obj_7
 Where Cust_field_value.BUSINESS_OBJECT_RK eq Cust_obj_7.CUST_OBJ_7_ID;
run;

data Work.Temp = &SAGIA;
run;

我想创建一个自定义数据集,其中 BUSINESS_OBJECT_RK 列值等于 CUST_OBJ_7_ID 但一个是字符串类型,一个是数字类型。所以它不起作用,然后我想在我选择的字段的工作库中创建一个数据集,因为我在上面编写了代码,但它不起作用。

proc print data=&SAGIA 工作正常,但 data 语句给我一个语法错误,提示缺少某些东西。

data Work.Temp = &SAGIA._ALL_; 没用

data Work.Temp = &SAGIA _null_; 没用

【问题讨论】:

    标签: sql sas sas-macro


    【解决方案1】:

    为什么不直接创建表而不是创建宏并将其存储到数据集中?

    data abc;
    input a $1. b;
    cards;
    1 20
    2 30
    3 40
    ;
    run;
    
    data pqr;
    input p q;
    cards;
    1 1000
    3 7000
    ;
    run;
    

    1) 使用proc sql

    proc sql;
    create table sagia as
     select *
     From abc, pqr
     Where input(abc.a,1.) eq pqr.p;
    run;
    

    2) 使用合并

    data abc;
    set abc;
    p = a*1;  /* converts character column a into numeric column p */
    /*or p=input(a,1.);*/
    drop a;
    run;
    
    proc sort data=abc;
    by p;
    run;
    
    proc sort data=pqr;
    by p;
    run;
    
    data sagia;
    merge abc(in=table1) pqr(in=table2);
    by p;
    if table1 and table2;
    run;
    

    如果还需要什么,请告诉我。

    【讨论】:

    • 非常感谢。它的工作原理,但是我在比较字符串数据和 int 时仍然遇到问题,而两者都与 0 = "0"
    • @Azeem112 您需要将字符转换为数字,反之亦然。我通常更喜欢字符而不是数字,num_value = input(char_value,best12.)。您可以在where 子句中执行此操作
    • @Longfish 有什么方法可以在报告时使用核心 base-sas 而不是使用 sql。像 asp.net 使用 linq 查询而不是 sql?
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    相关资源
    最近更新 更多