[程式] SAS datastep製作format與put format的
[軟體程式類別]:
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://www.ptt.cc/bbs/Statistics/M.1604816786.A.B97.html
推
11/08 15:29,
5年前
, 1F
11/08 15:29, 1F
→
11/08 15:29,
5年前
, 2F
11/08 15:29, 2F
→
11/08 15:29,
5年前
, 3F
11/08 15:29, 3F
→
11/08 15:29,
5年前
, 4F
11/08 15:29, 4F
目前把end移除了,現在確定data step完只剩下fmtname, start, label三個欄位,
還是一樣沒有成功把format put上去
※ 編輯: woowolf (118.150.232.189 臺灣), 11/08/2020 19:30:46
推
11/08 23:30,
5年前
, 5F
11/08 23:30, 5F
→
11/08 23:30,
5年前
, 6F
11/08 23:30, 6F
我知道用MERGE甚或SQL就能達到我想要的結果,但因為想了解他們之間的關係
所以這裡只是我隨便創個資料拿來測試研究用的,
還是希望可以成功用這個方法達到目的,還希望大家為我解解惑
※ 編輯: woowolf (114.32.82.158 臺灣), 11/09/2020 08:12:56
推
11/10 18:43,
5年前
, 7F
11/10 18:43, 7F
→
11/10 18:43,
5年前
, 8F
11/10 18:43, 8F
推
11/24 15:50,
5年前
, 9F
11/24 15:50, 9F