对此的任何帮助将不胜感激。我试图根据特定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
谢谢!
答案 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;