2015-07-02 69 views
0

任何幫助都將不勝感激。我試圖根據某個特定ID是否提交了某個代碼來爲我的數據添加一個「0」值。爲了更好地說明我在這裏想要做的是一個樣本化了一個數據集,其中包含三個ID和三個應該表示的代碼,接下來是我想要的。SAS-在條件不符合的情況下添加零點

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

請您提供一些代碼以顯示您到目前爲止所嘗試的內容嗎? Stackoverflow不是一個代碼寫入服務。謝謝=) –

+0

看看[這個問題](http://stackoverflow.com/questions/25646976/creating-all-possible-combinations-in-a-table-using-sas);您可以使用該技術來生成完全缺失A/B /等的數據集。數據。你需要獲得cost_per_each。 – Joe

+0

這裏的問題是,你需要以某種方式告訴SAS哪些ID /代碼組合應該在你的表中。有很多方法可以做到這一點。看到這個類似的問題的選項:http://stackoverflow.com/questions/28822470/count-rows-number-by-group-and-subgroup-when-some-subgroup-factor-is-0 – DWal

回答

-1

我想你有兩張桌子。一個帶有提交的代碼(可以說是提交表)和另一個具有所有可能的ID和提交的代碼的主表(可以說表主)。下面的代碼是創建一個樣本數據

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; 
+0

這需要一些解釋你在代碼之外做了什麼,我想象OP不想在數據中硬編碼異常。 – Joe

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; 
相關問題