As the others have said, your basic solution is:
grep -c string a*
You said you wanted to sort the files and list extra info.
You can't get all of that with grep, but have ls do part of it if you're not worried about efficiency and the files don't have spaces or other weird characters:
ls -tr `grep -l string a*` | while read file; do
grep -c string "$file" | tr '\n' '\t'
ls -l "$file"
done
The first grep in the backticks searches for matching files, listing only the names. The first ls then sorts those by modification time in reverse. We then search through each file a second time to count occurrences, and prepend the count to the standard "ls -l" listing.
This will be slow; if you really need a faster version you can probably hack one up in a scripting language.
grep -c
does not give you the number of occurrences... It gives you the number of lines that match. So if you have a line that says "stringstring", that will count as 1, not 2.