> -------------------------------------------------------------------------- <
作者: wjuu (幽默風) 看板: Statistics
標題: [問題] 有關SAS..
時間: Wed Nov 8 01:37:38 2006
請問一下:
檢查到重複 就把重複的資料全部殺掉的語法怎麼寫
proc sort nodupkey data=work.bb;
by port_code;
run;
上面的語法如果重複 會留下一筆 例如12 12 會留下12
現在希望能得到 檢查到重複 就把兩筆資料都殺掉
請問一下語法要改成怎樣 謝謝你的回答
> -------------------------------------------------------------------------- <
作者: alias (希望) 看板: Statistics
標題: Re: [問題] 有關SAS..
時間: Thu Nov 9 01:09:19 2006
※ 引述《wjuu (幽默風)》之銘言:
: 請問一下:
: 檢查到重複 就把重複的資料全部殺掉的語法怎麼寫
: proc sort nodupkey data=work.bb;
: by port_code;
: run;
: 上面的語法如果重複 會留下一筆 例如12 12 會留下12
: 現在希望能得到 檢查到重複 就把兩筆資料都殺掉
: 請問一下語法要改成怎樣 謝謝你的回答
PROC SORT DATA=work.bb; BY port_code; RUN;
DATA cc; SET work.bb; BY port_code;
IF FIRST.port_code THEN n=0;
n+1;
IF LAST.port_code & n=1 THEN OUTPUT; RUN;
就試試看吧, 以上
> -------------------------------------------------------------------------- <
作者: jupit (lbd) 看板: Statistics
標題: Re: [問題] 有關SAS..
時間: Thu Nov 9 16:17:05 2006
※ 引述《alias (希望)》之銘言:
: ※ 引述《wjuu (幽默風)》之銘言:
: : 請問一下:
: : 檢查到重複 就把重複的資料全部殺掉的語法怎麼寫
: : proc sort nodupkey data=work.bb;
: : by port_code;
: : run;
: : 上面的語法如果重複 會留下一筆 例如12 12 會留下12
: : 現在希望能得到 檢查到重複 就把兩筆資料都殺掉
: : 請問一下語法要改成怎樣 謝謝你的回答
: PROC SORT DATA=work.bb; BY port_code; RUN;
: DATA cc; SET work.bb; BY port_code;
: IF FIRST.port_code THEN n=0;
: n+1;
: IF LAST.port_code & n=1 THEN OUTPUT; RUN;
: 就試試看吧, 以上
如果是我會這麼寫
proc sort nodupkey data=work.bb;
by port_code;run;
data aa;
set work.bb;
if last.port_code=1;
run;
我通常都是在id非唯一時..如果資料重複(所有欄位都相同情況下)取最後一個id
or 同id而其他欄位並非全相同,則去排priority(看以何欄位為優先, by ....)
一樣取最後唯一的id
> -------------------------------------------------------------------------- <
作者: alias (希望) 看板: Statistics
標題: Re: [問題] 有關SAS..
時間: Fri Nov 10 10:12:03 2006
※ 引述《jupit (lbd)》之銘言:
: ※ 引述《alias (希望)》之銘言:
: : PROC SORT DATA=work.bb; BY port_code; RUN;
: : DATA cc; SET work.bb; BY port_code;
: : IF FIRST.port_code THEN n=0;
: : n+1;
: : IF LAST.port_code & n=1 THEN OUTPUT; RUN;
: : 就試試看吧, 以上
: 如果是我會這麼寫
: proc sort nodupkey data=work.bb;
: by port_code;run;
: data aa;
: set work.bb;
: if last.port_code=1;
: run;
: 我通常都是在id非唯一時..如果資料重複(所有欄位都相同情況下)取最後一個id
: or 同id而其他欄位並非全相同,則去排priority(看以何欄位為優先, by ....)
: 一樣取最後唯一的id
你的方法是當資料有重複的時候,只保留一個無重複的即可
即 若資料為 a b b c c c d d e e f f g
你的作法得到 a b c d e f g 的結果, 也就是去掉重複的部份
而我的作法會得到的是 a g , 也就是只要有重複, 我就都不要了
(程式中 last.port_code=1 時的n值代表 此種port_code的個數
若個數=1, 當然就代表此種port_code並無重複, 是為單一個的)
所以這兩種作法所會得到的結果是不同的
而我個人認為原PO需要的是 "只要有重複, 就不要"
因而提供一點拙見, 也歡迎指教.
祝 愉快