我需要从a-Z
范围内的随机字符生成一个字符串。我该怎么办?
Atm,我只能建议在1-52
范围内随机输入数字,然后使用charecters重新初始化数字。但这听起来很糟糕。
答案 0 :(得分:2)
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
答案 1 :(得分:1)
您可以使用byte
函数以及随机数生成随机字符。只需循环所需的次数,然后将结果与call cats
结合起来。 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;