SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

如何用简单的方法实现

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2008-5-16 00:37:29 | 只看该作者

Re: 如何用简单的方法实现

[code:1e0msw55]data ahuige;
  do x1=1 to 4;
    do x2=1 to 4;
    output;
    end;
  end;
run;
data ahuige(keep=x:);  
  set ahuige;
  array arr(1:4,1:4)
(
1
2
3
4

2
5
6
7

3
6
8
9

4
7
9
10
);
  x12=arr(x1,x2);
run;[/code:1e0msw55]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2008-5-16 21:10:56 | 只看该作者

Re: 如何用简单的方法实现

如何简单得到后面的产生值呢?
如果x1和x2分别为1 2 3 4 5 6 7 8 9呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2008-5-19 13:02:49 | 只看该作者

Re: 如何用简单的方法实现

[code:1ki9jveb]
data a;
        do x1=1 to 4;
                do x2=1 to 4;
                        output;
                end;
        end;
run;
data b;
        set a;
        if x1=4 and x2=4 then x12=10;
        if x1=3 then x12=x2+5;
        if x2=3 then x12=x1+5;
        if x1=2 then x12=x2+3;
        if x2=2 then x12=x1+3;
        if x1=1 then x12=x2;
        if x2=1 then x12=x1;
run;
[/code:1ki9jveb]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2008-5-19 14:00:37 | 只看该作者

Re: 如何用简单的方法实现

根据烟酒生的矩阵提示:可以生成任意数列,n=4,5,6,7,8,9。。。。。。。。
[code:1jrjqa9f]
%let n=9;
data a;
        do x1=1 to &n;
                do x2=1 to &n;
                        output;
                end;
        end;
run;
data b;
        set a;
        tem1=0;
        do j=1 to x1;
                tem1+(&n-(j-1));
        end;
        tem1=tem1-&n;
        tem2=0;
        do j=1 to x2;
                tem2+(&n-(j-1));
        end;
        tem2=tem2-&n;
        do i=&n to 1 by -1;
                if x1=i then x12=x2+tem1;
                if x2=i then x12=x1+tem2;
        end;
run;
proc transpose data=b out=c prefix=x2;
        by x1;
        var x12;
run;
[/code:1jrjqa9f]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2008-6-4 15:30:29 | 只看该作者

Re: 如何用简单的方法实现

ls的做法不错,我也写了一个,不过我的想法是将1至n的数字放入相应的位置中。下面的4可以相应地改为5,6,7,etc。
[code:14r6byxa]data a(keep=i j k);        
        t=1;        
        do i=1 to 4; do j=1 to 4;        
        if j>=i then do k=t;t+1; end; else k=0;
        output;        end;end;
        t=1;
        do j=1 to 4; do i=1 to 4;
        if i>=j then do k=t; t+1; end;else k=0;
        output; end;end;
run;
proc sort data=a;
       by i j;
run;
   
data b(keep=i j q);
        set a;
        retain q 0;
        if i=j then q=k;
        else if first.j=1  then q=k;else q+k;
        by i j;
        if last.j;
run;  
proc print; run;
[/code:14r6byxa]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2008-6-4 22:41:33 | 只看该作者

Re: 如何用简单的方法实现

[code:14a8a2mi]/* 创建模拟数据集 */
data test;
    do x1=1 to 4;
        do x2=1 to 4;
            output;
        end;
    end;
run;
/* 创建输出格式 */
proc format;
    value x1_fmt 1='x2_1_fmt'
                 2='x2_2_fmt'
                 3='x2_3_fmt'
                 4='x2_4_fmt'
                 ;
    value x2_1_fmt 1=1
                   2=2
                   3=3
                   4=4
                   ;
    value x2_2_fmt 1=2
                   2=5
                   3=6
                   4=7
                   ;
    value x2_3_fmt 1=3
                   2=6
                   3=8
                   4=9
                   ;
    value x2_4_fmt 1=4
                   2=7
                   3=9
                   4=10
                   ;
run;
/* 创建新变量 */
data test1(drop=temp);
    set test;
    temp=put(x1,x1_fmt.);
    x12=input(putn(x2,temp),2.);
run;[/code:14a8a2mi]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2008-6-4 22:52:32 | 只看该作者

Re: 如何用简单的方法实现

ls的做法只适用于n=4的情况,请问若要产生一个n=10的满足条件的数据集或是矩阵,那该怎么办哪?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2008-6-21 12:08:25 | 只看该作者

Re: 如何用简单的方法实现

我发现了一点点规律,发表在我自己的论坛上了,有兴趣的朋友过来看下吧!

[url:3sw2vhey]http://www.businessanalysis.cn/viewthread.php?tid=3786&page=1&extra=page%3D1#pid8833[/url:3sw2vhey]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 22:01 , Processed in 0.067673 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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