SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3619|回复: 10
打印 上一主题 下一主题

if 判断多条件简化

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-3-20 17:09:19 | 只看该作者

if 判断多条件简化

if i=1 then j=2;
else if i=2 then j=8;
else if i=3 then j=13;
.......
j无固定规律



这样的有简化方法么?ifn嵌套什么的得好多层~
谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-3-20 20:07:45 | 只看该作者

Re: if 判断多条件简化

上次你说我的代码多了,我就想到这个的,后来话题转向了,就没继续了。

[code:nxakwg59]data ex;
input i ;
j=choosen(i,2,8,13,14,40,45,80,100,1);
cards;
1
8
5
1
6
8
;
run;
proc print;run;[/code:nxakwg59]

以前有个帖子也用到这个函数,看这里 <!-- m --><a class="postlink" href="http://sasor.feoh.net/viewtopic.php?f=1&amp;t=4001">http://sasor.feoh.net/viewtopic.php?f=1&amp;t=4001</a><!-- m -->。

Super哥, 你是要把一百多万个字段放这个函数里面么? 不知道函数是否能挺的住。
告知下测试结果哈。

ps:如果你是要返回字符的话,用函数choosec()
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-3-20 22:48:24 | 只看该作者

Re: if 判断多条件简化

汗一个,大胖猫都不知道有choosen和choosec函数。

fcmp里面可以做行表达。
[code:2vi7la58]
proc fcmp;
        i = 4;
        j = if i  = 1  then 2 else if i = 2 then  8 else if i = 3 then 13 else if i = 4 then 15 else &#46;;
        put j = ;
quit;[/code:2vi7la58]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-3-21 00:03:43 | 只看该作者

Re: if 判断多条件简化

多谢,回来试试看。如果是宏和字符串的话,只能%scan了吧~
---------
fcmp估计对于太多的可能性判定,估计顶不住。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-3-22 06:36:51 | 只看该作者

Re: if 判断多条件简化

这个function一看就不错。不知道有没有什么使用须知一类的。
ifc/ifn个人认为不是一个很好用的常数。我现在已经基本不用这两个function了。

[quote:2hb4px9i]Super哥, 你是要把一百多万个字段放这个函数里面么? 不知道函数是否能挺的住。
告知下测试结果哈。[/quote:2hb4px9i]
如果一百多万个字段还没有规律的话,估计是他先停不住。即使他是super。。。
京剧
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
6#
发表于 2011-3-22 11:41:05 | 只看该作者

Re: if 判断多条件简化

proc format?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-3-22 13:21:50 | 只看该作者

Re: if 判断多条件简化

[quote:142j8yli]这个function一看就不错。不知道有没有什么使用须知一类的。
ifc/ifn个人认为不是一个很好用的常数。我现在已经基本不用这两个function了。

[quote:142j8yli]Super哥, 你是要把一百多万个字段放这个函数里面么? 不知道函数是否能挺的住。
告知下测试结果哈。[/quote:142j8yli]
如果一百多万个字段还没有规律的话,估计是他先停不住。即使他是super。。。
京剧[/quote:142j8yli]

纯随机~~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-3-22 13:23:00 | 只看该作者

Re: if 判断多条件简化

[quote:k63pi04c]proc format? [/quote:k63pi04c]

不错的思路。不过估计一个data步/fcmp的话,回来我试试看宏和runmacro
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-3-23 02:54:36 | 只看该作者

Re: if 判断多条件简化

大胖猫好像看懂super K兄的意思了,是想做一个自定义的方程吧。

[code:37e2p0y8]******(1) SIMULATION FOR 1 MILLION RECORDS******;
proc fcmp;
        array a&#91;1000000, 2&#93; / nosymbols;
                do i = 1 to 1E6;
                        a&#91;i, 1&#93; = i;
                        a&#91;i, 2&#93; = ranuni(20100322) + rannor(20100322);
                end;
        rc1 = write_array('sasuser&#46;simu_ds', a, 'key', 'value');
run;

******(2) GENERATE USER-DEFINED QUERY FUNCTION*******;
option mstored sasmstore=sasuser;
%macro myfunc1_macro() / store source;
%let num_in = %sysfunc(dequote(&amp;num_in));

proc sql noprint;
          select value into&#58; value
          from sasuser&#46;simu_ds
          where key = &amp;num_in
;quit;
%mend myfunc1_macro;

proc fcmp outlib = sasuser&#46;macro&#46;funcs;
   function myfunc1(num_in);
      rc = run_macro('myfunc1_macro', num_in, value);
      if rc eq 0 then return(value);
      else return(&#46;);
   endsub;
run;[/code:37e2p0y8]

以后就可以天天用了,速度还过的去。
[code:37e2p0y8]******(3) USE THIS FUNCTION*******;
option cmplib = (sasuser&#46;macro) mstored sasmstore = sasuser ;
data test;
        do x = 1 to 1000;
                y = myfunc1(x);
                output;
        end;
run;[/code:37e2p0y8]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2011-3-23 18:51:09 | 只看该作者

Re: if 判断多条件简化

非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-11 11:52 , Processed in 0.075011 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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