Looks like you have two issues: properly dealing with sub-samples and doing contrasts after model fitting. Here is one approach. You need to have a unique identifier of each replicate of each S, G, and V combination. Call this REP. Let's say there are 5 replicates of each combination of levels of the three fixed effects; there would be five records for S=1,G=1,V=1 (with REP = 1,2,3,4,5), etc. But if you also have sub-samples (let's say 3), then there would be 15 records for S=1,G=1,V=1, etc. There would be three records for S=1,G=1,V=1,REP=1,
three records for
S=1,G=1,V=1,REP=2,
etc.
Then you could use the program:
proc mixed ;
class S G V REP;
model Y = S|G|V;
random REP(S G V);
lsmeans S*G*V / slice = (S G S*G);
run;
Without the random statement, the procedure would incorrectly consider the sub-samples as independent replicates.
You could use a series of contrast statements for the last part of your post. But I can't get into describing this here. Instead, I am showing you how to use the SLICE option on LSMEANS statements. After the means in the output, you will get a series of tests of simple effects. For instance, the first line in the Effect Slice output will be the results of a test for G*V effects for S=1, then for S=2, and so on. Eventually, you will get the test results for V effects for S=1,G=1, then for S=1,G=2, and so on.
If you want more specifics, for instance, which varieties are different from each other at S=1,G=1, then for S=1,G=2, and so on, you will need to use GLIMMIX. Everything is the same (in this case) except you can expand the LSMEANS statement to:
lsmeans S*G*V / slice = (S G S*G) slicediff=(S G S*G);
This will generate a lot of output. You can read about slices in the documentation.