作者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/cn.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