Sas 从a-Z随机化符号
我需要从Sas 从a-Z随机化符号,sas,Sas,我需要从a-Z范围内的随机字符生成一个字符串。我怎么做 Atm,我只能建议在1-52范围内随机数字,然后用字符重新初始化数字。但这听起来很糟糕 您可以使用byte函数和随机数生成随机字符。只需循环所需次数,并将结果与callcats组合即可。byte函数从ASCII表返回相关字符。例如,您需要ASCII数字65-90(A-Z)和97-122(A-Z)。以下代码将生成6个字符的随机序列 data _null_; length z $6 y $1; do x=1 to 6; do until
a-Z
范围内的随机字符生成一个字符串。我怎么做
Atm,我只能建议在
1-52范围内随机数字,然后用字符重新初始化数字。但这听起来很糟糕 您可以使用byte
函数和随机数生成随机字符。只需循环所需次数,并将结果与callcats
组合即可。byte
函数从ASCII表返回相关字符。例如,您需要ASCII数字65-90(A-Z)和97-122(A-Z)。以下代码将生成6个字符的随机序列
data _null_;
length z $6 y $1;
do x=1 to 6;
do until (rank(y) in (65:90,97:122)); /* ASCII characters A-Z, a-z */
y=byte(65+floor((1+122-65)*rand("uniform"))); /* Generate random integer between 65 and 122 */
end;
call cats(z,y); /* concatenate values */
end;
putlog z;
run;
您可以使用byte
函数和随机数生成随机字符。只需循环所需次数,并将结果与callcats
组合即可。byte
函数从ASCII表返回相关字符。例如,您需要ASCII数字65-90(A-Z)和97-122(A-Z)。以下代码将生成6个字符的随机序列
data _null_;
length z $6 y $1;
do x=1 to 6;
do until (rank(y) in (65:90,97:122)); /* ASCII characters A-Z, a-z */
y=byte(65+floor((1+122-65)*rand("uniform"))); /* Generate random integer between 65 and 122 */
end;
call cats(z,y); /* concatenate values */
end;
putlog z;
run;
CALL RANPERM似乎非常适合此任务
25 data shuffle(keep=a: drop=addr);
26 array a[52] $1;
27 addr = addrlong(a1);
28 call pokelong(cat(collate(65,90),collate(97,122)),addr,52);
29 put @20 a[*];
30 seed=1234567890123;
31 do n=1 to 10;
32 call ranperm(seed,of a[*]);
33 put seed= @20 a[*];
34 output;
35 end;
36 stop;
37 run;
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
seed=295748501 i U I K e d H R b E D k u N c v B M T Z G V n A s W h r q Q j F J o x X O p g t Y w z P C m S l L f a y
seed=766887342 z F v U N G M q u H P Q Z d y b X l a D f p Y w m o r V A B n J I j e g c S x R T K O L i s k C h E W t
seed=618158873 L v x k T r c m S e F w n Z K G P t q E W C h M z X p d N o H Y V i s Q u y f B J O g l U R D b I a j A
seed=632090736 J l H Y T R A p N x C v U b w K V W d X t L y E G o Q B M z I S n q k f s O F P D j a r m i c g Z h e u
seed=1911942895 t G j Z e K q H x m L F A g T h v W a y V C B M k I r J S R P s Y Q p w O D E l X U o z u N d f n i b c
seed=479260872 Y Q i d P R z S G B a D K Z X j M E b h T m c e C I n x y w o A k r U f H u l N W s v J p L q O t g V F
seed=1143672881 L X i f a u m K T g x p E M o B q Z s c t A Q I P G D z U d H S y V J F j h r e l v C b k Y W R O w N n
seed=869134054 F D U g G w A Y J o e p r b H z q d l I L M v R W h y m t S n V x T P C K B k O Q i j s c N f Z a X E u
seed=481233318 n h P j V M y S W s m F a G l q f d o O A u T I E p k z b e C X t v Q H i w c U g Z K B R N L x r D J Y
seed=1445828380 d P t o N h c R r M l n E y g F x z S a W L G p w T Q k B H e v I K i b f q X C m Y D J Z V j A U u O s
CALL RANPERM似乎非常适合此任务
25 data shuffle(keep=a: drop=addr);
26 array a[52] $1;
27 addr = addrlong(a1);
28 call pokelong(cat(collate(65,90),collate(97,122)),addr,52);
29 put @20 a[*];
30 seed=1234567890123;
31 do n=1 to 10;
32 call ranperm(seed,of a[*]);
33 put seed= @20 a[*];
34 output;
35 end;
36 stop;
37 run;
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
seed=295748501 i U I K e d H R b E D k u N c v B M T Z G V n A s W h r q Q j F J o x X O p g t Y w z P C m S l L f a y
seed=766887342 z F v U N G M q u H P Q Z d y b X l a D f p Y w m o r V A B n J I j e g c S x R T K O L i s k C h E W t
seed=618158873 L v x k T r c m S e F w n Z K G P t q E W C h M z X p d N o H Y V i s Q u y f B J O g l U R D b I a j A
seed=632090736 J l H Y T R A p N x C v U b w K V W d X t L y E G o Q B M z I S n q k f s O F P D j a r m i c g Z h e u
seed=1911942895 t G j Z e K q H x m L F A g T h v W a y V C B M k I r J S R P s Y Q p w O D E l X U o z u N d f n i b c
seed=479260872 Y Q i d P R z S G B a D K Z X j M E b h T m c e C I n x y w o A k r U f H u l N W s v J p L q O t g V F
seed=1143672881 L X i f a u m K T g x p E M o B q Z s c t A Q I P G D z U d H S y V J F j h r e l v C b k Y W R O w N n
seed=869134054 F D U g G w A Y J o e p r b H z q d l I L M v R W h y m t S n V x T P C K B k O Q i j s c N f Z a X E u
seed=481233318 n h P j V M y S W s m F a G l q f d o O A u T I E p k z b e C X t v Q H i w c U g Z K B R N L x r D J Y
seed=1445828380 d P t o N h c R r M l n E y g F x z S a W L G p w T Q k B H e v I K i b f q X C m Y D J Z V j A U u O s
标题和描述之间的关系是什么?@Marccompt,我已经修正了,先生标题和描述之间的关系是什么?@Marccompt,我修正了,先生,请您解释一下,4行的作用是什么?第5行返回一个介于65和122之间的随机数。但是,您不希望包含数字91-96,因此第4行添加了一个额外的循环,直到返回的数字不在该范围内为止。变量y实际上存储字符值(这是字节
返回的值),因此我必须使用秩
函数将其转换回ASCII数。请您解释一下,第4行
的作用是什么?第5行返回一个介于65和122之间的随机数。但是,您不希望包含数字91-96,因此第4行添加了一个额外的循环,直到返回的数字不在该范围内为止。变量y实际上存储字符值(这是字节
返回的值),因此我必须使用秩
函数将其转换回ASCII数。是否有任何特殊原因需要使用直接内存访问函数来执行此操作?看起来像是overkill.DN,您可能想解释一下call ranperm
在这里做了什么-也就是说,它在“洗牌”字母,所以不需要替换就进行采样。@user667489我本可以使用do循环来填充数组,但正如上面提到的,这是实现相同结果的简单方法。我想我不这么认为。@Joe我认为RANPERM是不言自明的,可能值得注意的是,这并不等同于Keith的解决方案,除非你只保留每个排列的第一个字母,否则每个字母最多只能出现一次call ranperk
可能会有帮助。是否有任何特殊原因需要使用直接内存访问功能来执行此操作?看起来像是overkill.DN,您可能想解释一下call ranperm
在这里做了什么-也就是说,它在“洗牌”字母,所以不需要替换就进行采样。@user667489我本可以使用do循环来填充数组,但正如上面提到的,这是实现相同结果的简单方法。我想我不这么认为。@Joe我认为RANPERM是不言自明的,可能值得注意的是,这并不等同于Keith的解决方案,除非你只保留每个排列的第一个字母,否则每个字母最多只能出现一次<代码>呼叫ranperk
可能会对此有所帮助。