Re: [問題] SAS資料處理

看板Statistics作者 (咖啡王子)時間15年前 (2009/06/17 12:04), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串19/19 (看更多)
根據前人的提示 底下提供我的做法 修改部分 在最後面執行巨集的指令 %item(3); 因為例子最多只有三種品項 如果超過三個品項 則依照最終品項數目修改 data king ; input id$ year$ local$ item$ cost; cards ; 101 1999 台北 蚵仔麵線 40 101 1999 台南 棺材板 50 101 1999 淡水 阿給 30 101 2000 日本 拉麵 100 102 1999 美濃 紙傘 150 102 1999 台北 牛肉麵 100 103 2000 美國 漢堡 200 103 2008 美國 披薩 300 ; proc sort data=king;by id year; run; data king; set king; retain t 0; t=t+1; if year^=lag(year) then t=1; if id^=lag(id) then t=1; run; %macro item(t); %do i=1 %to &t; data a&i; set king; rename local=local&i item=item&i cost=cost&i ; if t=&i then output; drop t; run; proc sort;by id year; run; %end; data a; set a1; run; %do j=1 %to &t; data a; merge a a&j;by id year; run; %end; %mend item; %item(3); ※ 引述《kingbee ( 將心比心)》之銘言: : 我只想到變通的方法 : 若單一ID 單一年份 有很多地點和物品時 需要靠MARCO來寫 : 但我只把我想法寫出來 自己在去修改MARCO吧 : data king ; : input id$ year$ local$ item$ cost; : cards ; : 101 1999 台北 蚵仔麵線 40 : 101 1999 台南 棺材板 50 : 101 1999 淡水 阿給 30 : 101 2000 日本 拉麵 100 : 102 1999 美濃 紙傘 150 : 102 1999 台北 牛肉麵 100 : 103 2000 美國 漢堡 200 : 103 2008 美國 披薩 300 : ; : proc sort data=king ; by id year local ; : proc transpose data=king out=ts1; : by id year; : var local item cost; : run; : data t1; : set ts1; : keep id year col1 ; : run; : proc sort data=t1 ; by id year; : proc transpose data=t1 out=f1 PREFIX=var1; : by id year; : var col1; : run; : data t2; : set ts1; : keep id year col2 ; : run; : proc sort data=t2 ; by id year; : proc transpose data=t2 out=f2 PREFIX=var2; : by id year; : var col2; : run; : data t3; : set ts1; : keep id year col3 ; : run; : proc sort data=t3 ; by id year; : proc transpose data=t3 out=f3 PREFIX=var3; : by id year; : var col3; : run; : proc sort data=f1 ; by id year; : proc sort data=f2 ; by id year; : proc sort data=f3 ; by id year; : data king2; : merge f1 f2 f3 ; by id year; : drop _NAME_; : run; : 若有其他人有更好的方法也請幫忙了 : ※ 引述《a15321 (a15321)》之銘言: : : 有個SAS問題卡關多日,想請教板上前輩 : : 我有一筆資料是長這樣 (舉例) : : ID 年份 地點 物品 金額 : : ============================================== : : 101 1999 台北 蚵仔麵線 40 : : 101 1999 台南 棺材板 50 : : 101 1999 淡水 阿給 30 : : 101 2000 日本 拉麵 100 : : 102 1999 美濃 紙傘 150 : : 102 1999 台北 牛肉麵 100 : : 103 2000 美國 漢堡 200 : : 103 2008 美國 披薩 300 : : 希望能弄成以下結果 : : ID 年份 地點1 物品1 金額1 地點2 物品2 金額2 地點3 物品3 金額3 : : ========================================================================= : : 101 1999 台北 蚵仔麵線 40 台南 棺材板 50 淡水 阿給 30 : : 101 2000 日本 拉麵 100 . . . . . . : : 102 1999 美濃 紙傘 150 台北 牛肉麵 100 . . . : : 103 2000 美國 漢堡 200 . . . . . . : : 103 2008 美國 披薩 300 . . . . . . : : 原資料有上萬筆 : : 希望把所有 同ID且同年份 的項目合成一項 : : 後面就把項目改成 地點1,物品1,金額1....直到 地點n,物品n,金額n : : 我試了幾天,用PROC Transpose或PROC SQL都做不出來 : : 請問這在SAS中有辦法做嗎? 請各位前輩指點一下,感激不盡! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.225.32.129

06/17 16:01, , 1F
06/17 16:01, 1F
※ 編輯: tew 來自: 125.225.32.129 (06/17 19:26)

06/19 16:03, , 2F
非常受用,感謝 m(_ _)m
06/19 16:03, 2F
文章代碼(AID): #1AE6jOmo (Statistics)
討論串 (同標題文章)
文章代碼(AID): #1AE6jOmo (Statistics)