作者a3709417 (项肥)
看板Statistics
标题Re: [程式] sas 回圈
时间Mon Jun 27 14:47:45 2011
刚刚又卡住一个问题 希望大家不要弃嫌帮我看一下T^T
从刚刚的回圈中 我再抽出来sex=1的资料:
data maledr ; age=15 ; run ;
%macro mdivorce ;
%DO K=1958 %TO 1969 ;
DATA mdr ; SET wholedr ;
IF SEX^=1 THEN DELETE ;run ;
IF COHORT^=&K THEN DELETE ;
C&K=DR ;
KEEP AGE C&K ;
where 19<age<41 ;
RUN ;
DATA maledr ; MERGE mdr maledr ; BY AGE ; RUN ;
%END ;
%MEND ;
%mdivorce ;
可是log讯息却跑出:
RROR 180-322: Statement is not valid or it is used out of proper order.
ERROR: BY variables are not properly sorted on data set WORK.MDR.
SEX=1 COHORT=1958 AGE=51 _TYPE_=0 _FREQ_=479 DR=0.0557446592 FIRST.AGE=1
LAST.AGE=1 _ERROR_=1 _N_=2
应该主要是上头的讯息显示我code错误的主要来源
可是 我还是按照我之前的code打出来的....
NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 2 observations read from the data set WORK.MDR.
NOTE: There were 1 observations read from the data set WORK.MALEDR.
WARNING: The data set WORK.MALEDR may be incomplete. When this step was
stopped there were 1
observations and 6 variables.
WARNING: Data set WORK.MALEDR was not replaced because this step was stopped.
NOTE: DATA statement used:
real time 0.01 seconds
cpu time 0.01 seconds
NOTE: Line generated by the macro variable "K".
1 C1969
-----
180
ERROR 180-322: Statement is not valid or it is used out of proper order.
感谢上次问题帮我解答的各位板友
问题已经解决
可是...
这次又碰上新的问题..
LIBNAME MUS 'D:\MUS\' ; run ;
libname family 'D:\research' ; run ;
data wholedr ; sex=0 ; run ;
%MACRO div ;
%DO K=1978 %TO 2009 ;
DATA divorce ; SET MUS.L&K ;
COHORT=YEAR-AGE ;
if mrg=3 then div=1 ; else div=0 ;
if cohort<1958 then delete ;
if cohort>1969 then delete ;
KEEP COHORT AGE SEX EDU KIND_EDU YEAR MRG div WEIGHT ; RUN ;
proc means noprint ; var div ; by sex cohort age ; weight weight ;
output out=div1 mean=DR ; run ;
data wholedr ; set div1 family.wholedr ;
%END ;
%MEND ;
%div ;
与之前的回圈一样
想说如果变数MGR=2 则变数div=1 ;
其他的div=0
然後算其平均数
可是 东西跑不出来
我去log里头去看
出现以下的资讯:
ERROR: Data set WORK.DIVORCE is not sorted in ascending sequence. The current
by-group has COHORT =
1969 and the next by-group has COHORT = 1962.
---------------以上为以棕色显示出--------
NOTE: The SAS System stopped processing this step because of errors.
NOTE: There were 4 observations read from the data set WORK.DIVORCE.
---------------以上以蓝色显示出-----------
WARNING: The data set WORK.DIV1 may be incomplete. When this step was
stopped there were 2
observations and 6 variables.
WARNING: Data set WORK.DIV1 was not replaced because this step was stopped.
---------以上为绿色显示出-----------------
NOTE: PROCEDURE MEANS used:
real time 0.01 seconds
cpu time 0.01 seconds
第一个棕色看起来好像是我的档案没有被排进回圈里头
可是 为什麽呢?
之後好像是我的指令问题
可是我已经尽量debug 但还是看不出哪有问题....
还请各位帮我解答ˊˋ
※ 引述《a3709417 (项肥)》之铭言:
: [软体熟悉度]:
: 新手(不到1个月)
: 低(1~3个月)
: 以下是根据老师所给的code修改:
: %MACRO marrage ;
: %DO K=1978 %TO 2009 ;
: DATA marrage ; SET MUS.L&K ;
: COHORT=YEAR-AGE ;
: IF MRG=1 THEN marrage=0 ; ELSE marrage=1 ;
: if cohort<1958 then delete ;
: if cohort>1969 then delete ;
: KEEP COHORT AGE SEX EDU KIND_EDU YEAR MRG MARRAGE WEIGHT ; RUN ;
: PROC SORT ; BY SEX COHORT AGE ; RUN ;
: PROC MEANS NOPRINT ; VAR marrage ; BY SEX COHORT AGE ; WEIGHT WEIGHT ;
: OUTPUT OUT=marrage1 MEAN=MR ; RUN ;
: %END ;
: %MEND ;
: %marrage ;
: 原本应该每个COHORT(1958~1969)应该会跑出其在1978~2009年的mr平均值
: 可是我跑出来的好像却只有最後一年 2009的平均值
: 是我哪部分有遗漏掉吗??
: 还恳请大家帮我解惑!
--
1F:推 listener323:实岁是从妈妈的身体里出来开始算的02/08 13:59
2F:→ listener323:虚岁是从爸爸的身体里出来开始算的02/08 13:59
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.181.145.156
3F:推 west1996:跟你上一篇的code对照一下吧,在proc means前面少了proc 06/27 16:15
4F:→ west1996:sort那一段,所以後面proc means里要按组别计算统计量时 06/27 16:16
5F:→ west1996:他才会跳出log跟你说原始资料没照顺序排好,这个改掉後面 06/27 16:16
6F:→ west1996:的那一堆error应该都会消失了.... 06/27 16:16
7F:→ a3709417:对耶 @@ 感谢west大大!! 06/27 16:19
※ 编辑: a3709417 来自: 122.126.179.163 (06/27 21:41)