* Автор: Raynald Levesque, rlevesque@videotron.ca * 10 ноября 2000. * www.spsstools.net *. * Следующий файл содержит интервалы телефонных номеров, закреплённых за организациями и(или) территориями. GET FILE='C:\\temp\\ExampleRDD.sav'. * Число в теле макроса !nb - это желаемое число телефонных номеров для генерации в пределах интервала номеров. * Разумеется, если разность между старшими и младшими разрядами номеров в телефонной книге * меньше, чем желаемое число номеров, то все номера из интервала будут включены в выборку. DEFINE !nb()500!ENDDEFINE. COMPUTE casen=$casenum. COMPUTE delta = NUMBER(uprange,F8.0) - NUMBER(lowrange,F8.0)+1. STRING lowr upr (A4) #tmp(A1). * Я полагаю, что номер АТС (exchange) всегда состоит из 3 или 4 цифр. DO IF length(RTRIM(lowrange))=4. + COMPUTE lowr=lowrange. + COMPUTE upr=uprange. ELSE. + COMPUTE #tmp=SUBSTR(exchange,4). + COMPUTE lowr=CONCAT(#tmp,lowrange). + COMPUTE upr=CONCAT(#tmp,uprange). END IF. EXECUTE. LOOP cnt=1 TO delta. LEAVE ALL. XSAVE OUTFILE='c:\\temp\\numbers.sav' . END LOOP. EXECUTE. GET FILE='c:\\temp\\numbers.sav' . COMPUTE rv=UNIFORM(1). RANK VARIABLES=rv (A) BY casen /RANK /PRINT=NO /TIES=MEAN . SELECT IF (rrv<=min(!nb,delta)). STRING phonenb(A10). COMPUTE phonenb=CONCAT(SUBSTR(dialcode,1,3),SUBSTR(exchange,1,3),STRING(NUMBER(lowr,F8.0)+cnt-1,N4.0)). *Убираем лишнее. MATCH FILES FILE=* /DROP=casen TO rrv.