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

If statement SAS在不满足条件的情况下添加零,if-statement,sas,proc-sql,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

在此方面的任何帮助都将不胜感激。我正在尝试根据特定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

谢谢

我想你们有两张桌子。一个包含提交的代码(比如table submitted),另一个主表包含所有可能的ID和提交的代码(比如table 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;
然后,您可以使用procsql将提交的表左连接到主表。该函数可用于将缺少的提交时间值设置为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;

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

 /*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;

请您提供一些代码来显示您迄今为止所做的尝试好吗?Stackoverflow不是代码编写服务。谢谢你看;您可以使用该技术生成完全缺失A/B/等数据的数据集。你需要得到每个附加的成本。这里的问题是,你需要以某种方式告诉SAS哪些ID/代码组合应该在你的表中。有很多方法可以做到这一点。关于选项,请参见这个类似的问题:这需要对代码之外的操作进行一些解释,我想OP不想硬编码数据中的异常。