A first question. Is there a way to sample without replacement in Stata? I would like a random identifier (identifier2) to be assigned within another identifier (identifier1) without identitifier2 repeating within identifier1. The second question. Can I draw from a distribution, such as a normal with mean 10 and standard deviation of 3, but bound what I draw between 4 and 18?

I am currently doing the first question this by hand.

Code:
clear all
set obs 100
generate identifier1 =  runiformint(1,10)
bys identifier1: generate identifier2 =  runiformint(1,20)
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]
bys identifier1 (identifier2): replace identifier2 =  runiformint(1,20) if identifier2 == identifier2[_n-1]