If statement SAS在不满足条件的情况下添加零
在此方面的任何帮助都将不胜感激。我正在尝试根据特定ID是否提交了特定代码向数据添加“0”值。为了更好地说明我在这里要做的是一个示例,它是一个简化的数据集,有三个ID和三个应该表示的代码,后面是我想要的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 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不想硬编码数据中的异常。