SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3599|回复: 12
打印 上一主题 下一主题

一个将首字母变大写的sas macro

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-1-9 13:58:51 | 只看该作者

一个将首字母变大写的sas macro

%macro firstup(data = , var = );
        data temp;
                set &data;
                &var = ' ' || trim(left(lowcase(&var)));
        run;

        data firstup;
                set temp;
                i = 0;  
                do until(i = 0);  
                        i = anyspace(&var, i + 1);  
                        c = upcase(substr(&var, i + 1, 1));  
                        substr(&var, i + 1, 1) = c;
                end;
                &var = left(&var);
                drop i c;
        run;
%mend firstup;

data a;
        format a $20.;
        a = 'aaa bbb ccc';
run;

%firstup(data = a, var = a);
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-1-9 19:04:22 | 只看该作者

Re: 一个将首字母变大写的sas macro

[code:jvo46lsm]data a;
input x $char20.;
y=length(x)-length(left(x))+1;
substr(x,y,1)=upcase(substr(x,y,1));
drop y;
cards;
ab
  cd
e f
    de
;
run;[/code:jvo46lsm]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-1-9 21:33:58 | 只看该作者

不用那么复杂,偶来个简单的

[code:hghfngv7]data a;
format a $20.;
a = 'aaa bbb ccc';
b=propcase(a);
run;[/code:hghfngv7]
注:该函数V9中有效
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-1-10 09:56:17 | 只看该作者

Re: 一个将首字母变大写的sas macro

我写的macro是将每个英文单词的首字母变大字, 不是只将第一个单词的首字母变大写.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-1-10 11:16:04 | 只看该作者

Re: 一个将首字母变大写的sas macro

是啊,propcase函数的功能就是将每个英文单词的首字母变大字啊。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-1-10 11:53:52 | 只看该作者

Re: 一个将首字母变大写的sas macro

管理员的代码在针对这种空格分开的字符中确实是最简单的
我只看了你的标题,没有看代码反映的内容(误解了你真实的意图),下次改正。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-1-10 12:53:26 | 只看该作者

Re: 一个将首字母变大写的sas macro

propcase() 这个function不错, 收下了, 谢过!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2008-1-10 12:55:49 | 只看该作者

Re: 一个将首字母变大写的sas macro

我过去用SAS9.0, 没有propcase() function, 现在改用SAS9.1.3.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2008-1-11 19:14:46 | 只看该作者

Re: 一个将首字母变大写的sas macro

propcase function工作原理:先把所有字符转变为小写,然后按照指定的分割复将首字母转为大写
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2008-1-15 10:46:56 | 只看该作者

Re: 一个将首字母变大写的sas macro

[quote="byes":ebkx155i]propcase function工作原理:先把所有字符转变为小写,然后按照指定的分割复将首字母转为大写[/quote:ebkx155i]

跟我写的macro的思路不谋而合
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 14:01 , Processed in 0.070362 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表