SAS-在不满足条件的情况下添加零

时间:2015-07-02 16:25:54

标签: if-statement sas proc-sql

对此的任何帮助将不胜感激。我试图根据特定ID是否提交某个代码,为我的数据添加“0”值。为了更好地说明我在这里尝试做的是一个样本减少的数据集,有三个ID和三个代码应该表示,然后是我想要的。

ID    Submitted_Code  Times_Submitted    Cost_Per_Each
A      42              10                  15.00
A      43               5                  30.00
B      44               6                  35.00
C      42               5                  15.00
C      43               7                  30.00
C      44               8                  35.00

对于未提交代码的每个ID,将显示未提交的代码,随后提交的时间为零。就这样

   ID    Submitted_Code  Times_Submitted    Cost_Per_Each
    A      42              10                  15.00
    A      43               5                  30.00
    A      44               0                  35.00
    B      42               0                  15.00
    B      43               0                  30.00
    B      44               6                  35.00
    C      42               5                  15.00
    C      43               7                  30.00
    C      44               8                  35.00

谢谢!

2 个答案:

答案 0 :(得分:0)

感谢大家的帮助和建议,我能够使用上述建议的补丁,使用稀疏函数,然后使用左连接重新加入。再次感谢所有建议。

 /*Creating a table that creates all possible Combinations of Provider-Revenue Code for all Provider showing up in data*/
    proc freq data=ID_Code_breakdown noprint;
    tables ID*Code/sparse out=want(drop=percent);
    run;

/*Then merge with main table to get all possible combinations*/
    PROC SQL;
    CREATE TABLE LEFT1 AS
    SELECT A.*, B.HIC_COUNT, B.Amount_Total_Paid
    FROM want A LEFT JOIN ID_code_breakdown B
    ON A.Id = B.Id AND A.Code = B.Code
    ORDER BY Id;
    quit;

/*Replace missing value .'s with 0's*/
    data LEFT2;                 
       set LEFT1;               
       array change _numeric_;
                do over change;
                if change=. then change=0;
                end;
       run;

答案 1 :(得分:-1)

我想你有两张桌子。一个提交的代码(比如表格提交)和另一个包含所有可能的ID和提交的代码的主表(比如表master)。以下代码用于创建示例数据

data submitted;
  input ID $1 Submitted_Code Times_Submitted;
datalines;
  A 42 10
  A 43 5
  B 44 6
run;

data master;
  input ID $1 Submitted_Code ;
datalines;
  A 42
  A 43
  A 44
  B 42
  B 44
run;

然后,您可以使用PROC SQL将提交的表左连接到主表。 coalesce函数可用于将缺少的Submitted_Time值设置为0。

proc sql;
  create table foo as select 
  a.ID, a.Submitted_Code, Coalesce(b.Times_Submitted,0) As Times_Submitted
  from master a 
  left join submitted b
  on a.ID = b.ID and a.Submitted_Code = b.Submitted_Code;
quit;