I am running the following code:
 disc<-for (i in 1:33) {
 m=n[i]
 xbar<-sum(data[i,],na.rm=TRUE)/m 
 Sx <- sqrt(sum((data[i,]-xbar)^2,na.rm=TRUE)/(m-1))
 Sx
 i=i+1}
Running it:
 >disc
 NULL
Why is it giving me NULL?
I am running the following code:
 disc<-for (i in 1:33) {
 m=n[i]
 xbar<-sum(data[i,],na.rm=TRUE)/m 
 Sx <- sqrt(sum((data[i,]-xbar)^2,na.rm=TRUE)/(m-1))
 Sx
 i=i+1}
Running it:
 >disc
 NULL
Why is it giving me NULL?
 
    
    This is from the documentation for for, accessible via  ?`for`:
‘for’, ‘while’ and ‘repeat’ return ‘NULL’ invisibly.
Perhaps you are looking for something along the following lines:
library(plyr)
disc <- llply(1:33, function(i) {
  m=n[i]
  xbar<-sum(data[i,],na.rm=TRUE)/m 
  Sx <- sqrt(sum((data[i,]-xbar)^2,na.rm=TRUE)/(m-1))
  Sx
})
Other variants exists -- the ll in llply stands for "list in, list out". Perhaps your intended final result is a data frame or an array -- appropriate functions exist.
The code above is a plain transformation of your example. We might be able to do better by splitting data right away and forgetting the otherwise useless count variable i (untested, as you have provided no data):
disc <- daply(cbind(data, n=n), .(), function(data.i) {
  m=data.i$n
  xbar<-sum(data.i,na.rm=TRUE)/m 
  sqrt(sum((data.i-xbar)^2,na.rm=TRUE)/(m-1))
})
See also the plyr website for more information.
Related (if not a duplicate): R - How to turn a loop to a function in R
krlmlr's answer shows you how to fix your code, but to explain your original problem in more abstract terms: A for loop allows you to run the same piece of code multiple times, but it doesn't store the results of running that code for you- you have to do that yourself.
Your current code only really assigns a single value, Sx, for each run of the for loop. On the next run, a new value is put into the Sx variable, so you lose all the previous values. At the end, you'll just end up with whatever the value of Sx was on the last run through the loop.
To save the results of a for loop, you generally need to add them to a vector as you go through, e.g.
# Create the empty results vector outside the loop
results = numeric(0)
for (i in 1:10) {
  current_result = 3 + i
  results = c(results, current_result)
}
 
    
    In R for can't return a value. The unique manner to return a value is within a function. So the solution here, is to wrap your loop within a function. For example:
getSx <- function(){
  Sx <- 0
  disc <- for (i in 1:33) {
    m=n[i]
    xbar <- sum(data[i,],na.rm=TRUE)/m 
    Sx <- sqrt(sum((data[i,]-xbar)^2,na.rm=TRUE)/(m-1))
  }
  Sx
}
Then you call it:
 getSx()
Of course you can avoid the side effect of using a for by lapply or by giving a vectorized But this is another problem: You should maybe give a reproducible example and explain a little bit what do you try to compute.
