When the p-value is really small, Stata just gives you "0.000" or sometimes "0.0000", depending on the setting. The p-value is never actually ZERO, but in these cases it is so small that when you round to 3 or 4 digits, the rounded value appears to be zero.
In these cases, you should report that the p-value is LESS THAN some critical value. For "0.000", the most precise thing to say is "p<0.0005" (because, for example, p=.0006 would round to "0.001", but p=.0004 would round down to "0.000"). It is also correct and often reasonable to say p<.01 or p<.001, etc, but these give a bit less information. For "0.0000", you could say "p<.00005".
If you want to get the EXACT value, you can often use the test statistic that Stata provides. For example, you might get a chi-squared value (along with degrees of freedom), and you can have Stata convert that to an exact p-value for you. For example, using the Coronary Calcium dataset in lab 1, try:
tab smoke htn, chi2
Stata will give you "Pearson chi2(1) = 4.916" and "Pr = 0.026".
Now try this Stata command:
display 1 - chi2(1, 4.916)
You should get the 0.026 p-value. Now try:
tab male htn, chi2
The p-value here is "0.000", but with the display command:
display 1- chi2(1, 24.0355)
you'll get "p=9.458e-07" (it's REALLY small!).
Similar functions can probably be found for ttests, F tests (Anova), etc.
I've always advised to round all of these to "<0.001". This is because many of the techniques to derive p values are approximate and stating the exact numerical value of very small p values gives a false sense of accuracy.
This is unless one is in the realm of multiple comparisons and needs to show the exact nature of the very small value. In these instances, one should be sure that one is using exact (rather than approximate) statistical techniques.