楼主: crackman
15196 47

跟crackman读SAS程序(15)--如何将宏变量按照字母顺序排列 [推广有奖]

31
andy162639 发表于 2010-8-25 14:55:15
留个脚印 学习
有人说,统计归根结底就是个P

32
crackman 发表于 2010-8-25 15:10:41

跟crackman读SAS程序(26)

title "This is title 1" ;
data one;
  do i=1 to 10;
    output;
  end;
run;
proc print; run;
title2 "This is title 2";
title3 "This is title 3";
data two;
  do j=1 to 5;
   output;
  end;
run;
proc print; run;

proc sql noprint;
  select TEXT into : MYTITLES separated by ", "
  from SASHELP.VTITLE
  where NUMBER in (1,2,3);
quit;

%put &mytitles;

这里学习的是
1.SASHELP.VTITLE存储是数据集中的TITLE的文本对象
2.SQL中与宏的结合使用,将在SASHELP.VTITLE查询结果赋值给宏变量 MYTITLES 。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
hopewell + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

33
T星星 发表于 2010-8-25 15:18:50
不错不错~~我有个问题想请教~谢谢!
在宏里用in这个运算符时为什么可以不用“()”括号?
设置了minoperator这个选项后就可以用in了,那我能这样类推吗,比如设置了mmeanoperator,就可以在宏里用mean?

34
crackman 发表于 2010-8-25 15:28:00
楼上的想法非常好
你可以去试一下
看看行不行

35
crackman 发表于 2010-8-25 15:35:12

跟crackman读SAS程序(27)-学会COUNTW计算字符串中的Word数量

%let string = blue red green;
%let word_cnt=%sysfunc(countw(&string));
%put There are &word_cnt words in the string "&string";
注意是在9.1以上版本使用哦
已有 2 人评分威望 学术水平 热心指数 信用等级 收起 理由
admin + 1 精彩帖子
hopewell + 1 + 1 + 1 精彩帖子

总评分: 威望 + 1  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

36
T星星 发表于 2010-8-25 15:38:47
我用的是9.1,没法试~~斑竹是从哪里学到的?

37
crackman 发表于 2010-8-25 15:55:28

跟crackman读SAS程序(28)--DATA SET中IN的使用

data one;
  input string $;
datalines;
apple
banana
coconut
;
data two;
  input string $;
datalines;
anagram
bottle
clown
dog
;
data combo;
  set one(in=o) two(in=t);
  if o then origin='one';
  else origin='two';
run;
proc print data=combo;
run;

其实这里用了IN这个参数来表示在SET过程中,观测对象的来源,根据IN参数的值来判断并赋予不同的值。
结果:
                                                         SAS 系统               

                                                 Obs    string     origin
                                                  1     apple       one
                                                  2     banana      one
                                                  3     coconut     one
                                                  4     anagram     two
                                                  5     bottle      two
                                                  6     clown       two
                                                  7     dog         two
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
hopewell + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

38
crackman 发表于 2010-8-25 20:34:41

跟crackman读SAS程序(29)--FCMP构建计算年龄的函数

proc fcmp outlib=work.functions.samples; /*SAS_AGE自定义的功能函数存放的地方*/
function sas_age(Birthday,Current); /*函数的两个参数*/
   age=int(intck('month',birthday,current)/12); /*用INTCK计算AGE*/
   if month(birthday)=month(current) then
      age = age-(day(birthday)>day(current)); /*如果月份一样,如果生日的天数大于当前的天数,那么返回1,否则是0*/
   return(age); /*输出AGE这个结果,也就是函数的返回值吧*/
endsub;
run;
options cmplib=work.functions; /*注意要加上这个OPTIONS*/
data birth;
  input name $ bday :mmddyy10.;
datalines;
Miguel      12/31/1973
Joe         02/28/1976
Rutger      03/29/1976
Broguen     03/01/1976
Susan       12/12/1976
Michael     02/14/1971
LeCe        11/09/1967
Hans        07/02/1955
Lou         07/30/1960
;
run;
                                                         
data ages;
  set birth;
  retain current;
  if _n_=1 then current=today();
  format bday current worddate20.;
  actualage=sas_age(bday,current);
run;
这个FCMP过程给了我们很多可以自定义函数的空间,大大扩充SAS函数的自定义,值得学习

39
crackman 发表于 2010-8-25 22:00:18

跟crackman读SAS程序(30)--DATA步里面实现不同数据集的观测对象的组合

data one;                  
  input id $ fruit $;      
datalines;                 
a apple                    
a apple                    
b banana                  
c coconut                  
c coconut                  
c coconut                  
;                                                   
data two;                  
  input id $ color $;      
datalines;                 
a amber                    
b brown                    
b black                    
c cocoa                    
c cream                    
;               
data every_combination;
  /* 一般第一个SET的数据集应该是较大、数据观测、变量较多的数据集 */
  set one;
  do i=1 to n;
  /*对于每一个ONE里面的观测,都与TWO里面的每一个观测进行循环组合*/
    set two point=i nobs=n;
    output;
  end;
run;
proc print data=every_combination;
run;
这个程序给交叉组合提供了一个不需要SQL的另外一个方法,用的是SET机制

40
crackman 发表于 2010-8-25 22:11:02
SAS 系统               2010年08月25日 星期三 下午08时27分19秒  11

                                              Obs    id     fruit     color

                                                1    a     apple      amber
                                                2    b     apple      brown
                                                3    b     apple      black
                                                4    c     apple      cocoa
                                                5    c     apple      cream
                                                6    a     apple      amber
                                                7    b     apple      brown
                                                8    b     apple      black
                                                9    c     apple      cocoa
                                               10    c     apple      cream
                                               11    a     banana     amber
                                               12    b     banana     brown
                                               13    b     banana     black
                                               14    c     banana     cocoa
                                               15    c     banana     cream
                                               16    a     coconut    amber
                                               17    b     coconut    brown
                                               18    b     coconut    black
                                               19    c     coconut    cocoa
                                               20    c     coconut    cream
                                               21    a     coconut    amber
                                               22    b     coconut    brown
                                               23    b     coconut    black
                                               24    c     coconut    cocoa
                                               25    c     coconut    cream
                                               26    a     coconut    amber
                                               27    b     coconut    brown
                                               28    b     coconut    black
                                               29    c     coconut    cocoa
                                               30    c     coconut    cream

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 05:29