作者woowolf (狼咩咩兒)
看板Statistics
標題[程式] SAS datastep製作format與put format的
時間Sun Nov 8 14:26:15 2020
[軟體程式類別]:
SAS
[程式問題]:
資料處理
[軟體熟悉度]:
熟悉
[問題敘述]:
先敘述一下兩個資料(隨便做的測試資料):
第一個資料是學號與編號
https://imgur.com/kGKPpae
第二個資料是編號與其對應到的班級及班級編號
https://imgur.com/bFadEMX
現在要利用第二個資料,以NUM為準,將班級與班級編號做成format,
再利用這些format put至第一個資料完成合併
資料預期呈現是這樣的:
https://imgur.com/SXwneVW
現在的問題是,因為start的部分是numeric,而要做的兩個format各為numeric
與character,沒有很懂做出來的是format還是informat,跟put的時候要用input還是put
(還是跟proc imformat/format有關?或是在datastep的時候要加type = ?)
最後put上資料後,出現了這樣的錯誤:
The format $CLASSNUM was not found or could not be loaded.
但在前面proc的部分,format的確被做出來了
NOTE: Format CLASSNUM has been output.
然而,若把put classnum的那行關掉,資料呈現會是這樣的:
https://imgur.com/BuYELem
原本預期class那欄應該出現class的名稱,現在看來卻是沒有成功put上值
想知道中間哪個環節出了問題
還有想請大神們解釋一下那些datastep 做出來的format informat使用的put input關係
[程式範例]:
以下是以datastep做成fotmat的過程
data class ;
set test(keep = Num class) ;
fmtname = "$class" ;
rename Num = start class = label ;
run ;
proc sort data = class nodupkey ;
by _all_ ;
run ;
proc format cntlin = class ;
run ;
data ClassNum ;
set test(keep = ClassNum Num) ;
fmtname = "ClassNum" ;
rename Num = start ClassNum = label ;
run ;
proc sort data = ClassNum nodupkey ;
by _all_ ;
run ;
proc format cntlin = ClassNum ;
run ;
做好format之後,以format將資料put上第一個資料
data want ;
set have ;
class = put(StudentID, $class.) ;
ClassNum = put(StudentID, classnum.) ;
run ;
--
嗷嗚嗷嗚
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.150.232.189 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Statistics/M.1604816786.A.B97.html
1F:推 west1996: data step的整理中的end看起來都是多餘的,單點對應不需 11/08 15:29
2F:→ west1996: 要end(如果要寫,end跟start欄位內容應該要一樣) 11/08 15:29
3F:→ west1996: 確定一下你的data step完是不是只有fmtname,start,label 11/08 15:29
4F:→ west1996: 三個欄位 11/08 15:29
目前把end移除了,現在確定data step完只剩下fmtname, start, label三個欄位,
還是一樣沒有成功把format put上去
※ 編輯: woowolf (118.150.232.189 臺灣), 11/08/2020 19:30:46
5F:推 andy30135: 這個應該用data step merge by Num就能做出你要的結果 11/08 23:30
6F:→ andy30135: 了 11/08 23:30
我知道用MERGE甚或SQL就能達到我想要的結果,但因為想了解他們之間的關係
所以這裡只是我隨便創個資料拿來測試研究用的,
還是希望可以成功用這個方法達到目的,還希望大家為我解解惑
※ 編輯: woowolf (114.32.82.158 臺灣), 11/09/2020 08:12:56
7F:推 west1996: proc format fmtlib; select $class classnum; run; 11/10 18:43
8F:→ west1996: 用這個看一下你做出來的format內容長什麼樣子 11/10 18:43
9F:推 nkes60917: 如果不是兩邊都是文字的話不能用$開頭的format 11/24 15:50