SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3772|回复: 14
打印 上一主题 下一主题

INPUT语句中@与@@的解释

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-7-22 15:56:21 | 只看该作者

INPUT语句中@与@@的解释

sas运行时,每一个input,读取数据的指针要往下移一行,每一次迭代(指程序运行到末尾)指针也要下移一行,一个@表示每个input后指针保持原来的位置,@@表示每次迭代之后指针保持原来位置。
[code:e4759]data a;
input x y @@;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;

data b;
input x y @;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;

data c;
input x y ;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;

data d;
input x;
input y;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;

data e;
input x @;
input y;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;

data f;
input x @;
input y @;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;

data g;
input x @;
input y @@;
cards;
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
;
run;[/code:e4759]
体会一下

原贴参见: <!-- m --><a class="postlink" href="http://sasor.feoh.net/modules.php?name=Forums&amp;file=viewtopic&amp;t=429">http://sasor.feoh.net/modules.php?name= ... opic&amp;t=429</a><!-- m -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-7-25 05:02:17 | 只看该作者

I see! thanks so much!

Thanks! <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-7-30 16:20:39 | 只看该作者

建议

如果将第二排数据用2,第三排用3,余类推,可能效果会好一些
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-10-5 12:26:57 | 只看该作者

Thanks

谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-10-13 16:09:44 | 只看该作者

Re: INPUT语句中@与@@的解释

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 很好!效果明显!谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-12-21 20:00:29 | 只看该作者

疑问

引用老大的:“一个@表示每个input后指针保持原来的位置,@@表示每次迭代之后指针保持原来位置。 ”

不是很明白什么意思!
能不能从读取数据后的结果来解释一下,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2004-12-21 20:29:33 | 只看该作者

知道了!

[color=blue:51af9]在老大说的

<!-- m --><a class="postlink" href="http://sasor.feoh.net/modules.php?name=Forums&amp;file=viewtopic&amp;t=429">http://sasor.feoh.net/modules.php?name= ... opic&amp;t=429</a><!-- m -->

的帖子里面的scott2002兄弟说的让我明白了。

原话如下:

1. No @ or @@, each Data Step will read another line of data;
2. @, each Data Step will read another line of data after all declared variables are read;
3. @@, each Data Step will read another line when reach the ead of line.[/color:51af9]

我在8.2上自己用汉语理解如下:

1。如果没有@ 或 @@, 那么SAS将从输入的数据的第二行开始读数据,并且是从第二行开始,读完了所有的变量对应的数据后就跳到下一行,---比如如果第二行有10个数据,而之前定义的变量只有5个,那么只有前5个数据会被读取对应5个变量,之后跳入下一行。

2。如果使用@ ,  SAS会从输入的数据的第一行开始读数据,并且也是读完了所有的变量对应的数据后就跳到下一行。

3。如果使用@ @, SAS会从输入的数据的第一行开始读数据,并且是按照定义变量顺序一组一组的连续读数据,不会跳行。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2005-6-15 13:59:17 | 只看该作者

这样处理可能效果更明显一点

data A;
input x;
do i = 1 to 3;
    input y z r;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data B;
input x;
do i = 1 to 3;
    input y z r@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data C;
input x;
do i = 1 to 3;
    input y z r@@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data D;
input x@;
do i = 1 to 3;
    input y z r;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data E;
input x@;
do i = 1 to 3;
    input y z r@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data F;
input x@;
do i = 1 to 3;
    input y z r@@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data G;
input x@@;
do i = 1 to 3;
    input y z r;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data H;
input x@@;
do i = 1 to 3;
    input y z r@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data I;
input x@@;
do i = 1 to 3;
    input y z r@@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;  

data A1;
input x;
do i = 1 to 4;
    input y z r;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data B1;
input x;
do i = 1 to 4;
    input y z r@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data C1;
input x;
do i = 1 to 4;
    input y z r@@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data D1;
input x@;
do i = 1 to 4;
    input y z r;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data E1;
input x@;
do i = 1 to 4;
    input y z r@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data F1;
input x@;
do i = 1 to 4;
    input y z r@@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data G1;
input x@@;
do i = 1 to 4;
    input y z r;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data H1;
input x@@;
do i = 1 to 4;
    input y z r@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
data I1;
input x@@;
do i = 1 to 4;
    input y z r@@;
        output;
end;
cards;
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49  
50 51 52 53 54 55 56 57 58 59  
60 61 62 63 64 65 66 67 68 69
;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2005-6-15 15:20:51 | 只看该作者

Re: 知道了!

[quote=&quot;nfiona&quot;:5c900]我在8.2上自己用汉语理解如下:

1。如果没有@ 或 @@, 那么SAS将从输入的数据的第二行开始读数据,并且是从第二行开始,读完了所有的变量对应的数据后就跳到下一行,---比如如果第二行有10个数据,而之前定义的变量只有5个,那么只有前5个数据会被读取对应5个变量,之后跳入下一行。

2。如果使用@ ,  SAS会从输入的数据的第一行开始读数据,并且也是读完了所有的变量对应的数据后就跳到下一行。

3。如果使用@ @, SAS会从输入的数据的第一行开始读数据,并且是按照定义变量顺序一组一组的连续读数据,不会跳行。[/quote:5c900]
我试了一下,没有@ 或 @@, 和使用@效果是一样的,并不是从第二行开始读取数据的。只要把第一行的数据全定义为1,第二行全是2,以下类推,就很容易得到结论了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2005-6-15 15:38:08 | 只看该作者

明白了。

等到我修改完数据,执行完几个程序才彻底明白了shiyiming超级管理员的帖子的真正含义。
上个帖子也错了。希望不至于误导别人。
谢谢!受益匪浅。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-11 08:42 , Processed in 0.073157 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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